452
צפיות
צפיות
23
תשובות
תשובות
בעיה בבניית פורומים
אני בונה מערכת פורומים, ואני רוצה שבעמוד הראשי שאני מציג את הפורומים, אני אוכל להציג גם את מספר האשכולות בכל פורום
איך אני אמור לעשות זאת?
לעשות עמודה חדשה של מ'ס הודעות בטבלת הפורומים או לבדוק בטבלת ההודעות את מספר הפורום של כל הודעה ולחשב את המ'ס לכל פורום?
תומר
23 תשובות
תעשה לכל פורום count בשביל להוציא
את מספר ההודעות בו
יותר טוב
צור VIEW במסד שיאסוף לך את כל ה-IDים של ההודעות הראשיות בכל המערכת
ב-ASP תעשה כך
VIEW:
SELECT COUNT(tblforum.rootId) AS cntFMessage, tblForum.forumId, topics.forumName
FROM forum INNER JOIN topics ON topics.forumID=yblForum.forumId
GROUP BY tblForum.forumId
ASP:
SELECT cntFMessage, forumId, forumName FROM viewName
אתה מתכוון ליצור טבלה חדשה
ששמה יהיה view?
לא! (ילדה תוסיפי על דברי בבקשה)
VIEW – שאילתא ברמת המסד
התחביר שלה ב-TSQL הוא :
CREATE VIEW view_name <fields> AS
selectStatement
באקסס נכנסים לחלק של QUERY (שאילתות) ויוצרים שאילתא בתצוגת עיצוב ובוחרים בקוד SQL
ואז כותבים את ה-SQL שרוצים
טוב הבנתי
ומה זה?
cntFMessage
זה הכינוי שנתתי לתוצאה של פונקצית
COUNT
ואיך אני מציג את מספר האשכולות
בכל פורום?
ע"י cntFMessage
זה השדה שמונה את מספר האשכולות בכל פורום (אם אתה עובד במבנה של parentId=0 זה הודעה ראשית אז ב-VIEW שים WHERE מתאים)
הcount
ספר את האשכולות בכל הפורומים ביחד או שספר לכל פורום לחוד (כמו שרציתי)?
וכן אני עובד עם parent_id, הודעה ראשית אצלי היא 0
ואיזה where לשים?
תודה
אה הבנתי עם cntFMessage
אז עכשיו אני צריך לדעת רק איזה where לשים..
אתה צריך לשים
את ה-WHERE בשאילתת ה-ASP. בעצם אנו בודקים מאיזה פורום ניקח את מספר האשכולות
SELECT cntFMessage, forumId, forumName FROM viewName WHERE forumId=X
x – the Id of the forum
אני הייתי מייעל את זה ע"י יצירת SP במסד
PARAMETERS p_forumId int;
SELECT COUNT(tblforum.rootId) AS cntFMessage, tblForum.forumId, topics.forumName
FROM forum INNER JOIN topics ON topics.forumID=tblForum.forumId
WHERE topics.forumId=[p_forumId] AND tblForum.forumId=[p_forumId]
GROUP BY tblForum.forumId
ואז ב-ASP קורא ל-SP הנ"ל
EXECUTE spName @p_forumid=X
X – number
אני לא מכיר sp
אבל אם זה מייעל את הקוד אני אשים
רק יש לי כמה שאלות:
1. מה זה הp_forumId?
2. מה זה הX – number שכתבת למטה?
3. איפה עוד אני צריך לכתוב את שם הsp חוץ מהקריאה אליו בasp?
תודה
מספר תשובות
יש על SP מידע ב-FAQ ומאמר שאני כתבתי אל השימוש בו באקסס.
1. p_forumId זה פרמטר שמציין מאיזה פורום לשלוף (אתה קובע את הערך שלו)
2. X – ה-ID של הפורום שממנו אתה שולף. המספר המועבר כפרמטר p_forumId ל-SP
3.את שם ה-SP אתה מציין ביצירתו ובקריאה אליו (מה-ASP או ברמה אחרת)
כתבתי את זה במסד:
PARAMETERS p_forumId Long;
SELECT COUNT(forum.rootId) AS cntFMessage, Forum.fId AS Forum_fId, topics.fId AS topics_fid, topics.Name, topics.des
FROM topics INNER JOIN forum ON topics.fId = forum.fId;
WHERE topics_fId=[p_forumId] AND Forum_fId=[p_forumId]
GROUP BY Forum.fId;
ואחרי שאני שומר האקסס אומר לי
characters fount after end of SQL statement
מה זה אומר?
*קראתי את המאמר על sp והבנתי
אבל את הבעיה שלי כאן אני לא מצליח לפתור
שאילתה כזאת לא תעבוד
משום שאתה לא יכול לשלוף שדות שאתה לא מקבץ לפיהם/מפעיל עליהם פונקצית צבירה.
אז מה לעשות שזה יעבוד?
שלוף רק את השדות שאתה מקבץ לפיהם
או שאתה מפעיל עליהם פונקציות צבירה, אין דרך אחרת. ככה הוא לא יודע לאן לשייך כל עמודה.
תודה אוריקס
עשיתי מה שאמרת ועובד לי
ותודה גם לניר
חלוקה לעמודים
אני מנסה לעשות חלוקה לעמודים כמו שניר הסביר במאמר על הפורום הרקורסיבי
אז יצרתי את הview במסד, שמתי שם את השאילתות והייתה שגיאה.
השאילתות:
SELECT forum.id, forum.parentId, forum.subject, forum.message
FROM forum
WHERE forum.rootId in (SELECT TOP 15 fixedForum.rootId
FROM fixedForum
WHERE fixedForum.rootId not in(
SELECT TOP (15 *x) fixedForum.rootId
FROM fixedForum
ORDER BY fixedForum.MAXmsgDate)
ORDER BY fixedForum. MAXmsgDate DESC
)
ORDER BY forum.id DESC
(צירפתי להודעה את השגיאה)
למה ההודעה לא קפצה אחרי
ההודעה הקודמת שלי?
קודם כל
השאילתא הזו צריכה להיות בעמוד ה-ASP
X – זה מספר העמוד שאתה מקבל דרך ה-QS בעמוד ה-ASP
וזה לא הוקפץ כי עברו חמישה ימים מההודעה הראשונה
אה הבנתי
הייתי צריך לשים view אחר במסד, שמתי אותו
עדיין לא עובד
השגיאה:
Microsoft VBScript compilation error '800a0401'
Expected end of statement
/masterPlus/forums/forum.asp, line 101
cntRec = cint(rs1.fields("total"));
———————————-^
שורה 101:
cntRec = cint(rs1.fields("total"));
מה הבעיה?
תודה