שלח תשובה

זירת השאלות

452
צפיות
23
תשובות

בעיה בבניית פורומים

,‏ 30 במאי, 2004

אני בונה מערכת פורומים, ואני רוצה שבעמוד הראשי שאני מציג את הפורומים, אני אוכל להציג גם את מספר האשכולות בכל פורום

איך אני אמור לעשות זאת?
לעשות עמודה חדשה של מ'ס הודעות בטבלת הפורומים או לבדוק בטבלת ההודעות את מספר הפורום של כל הודעה ולחשב את המ'ס לכל פורום?

תומר

תגיות:

23 תשובות

  1. תעשה לכל פורום count בשביל להוציא
    את מספר ההודעות בו

  2. ניר טייב הגיב:

    יותר טוב
    צור 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

  3. אתה מתכוון ליצור טבלה חדשה
    ששמה יהיה view?

  4. ניר טייב הגיב:

    לא! (ילדה תוסיפי על דברי בבקשה)
    VIEW – שאילתא ברמת המסד
    התחביר שלה ב-TSQL הוא :


    CREATE VIEW view_name <fields> AS
    selectStatement

    באקסס נכנסים לחלק של QUERY (שאילתות) ויוצרים שאילתא בתצוגת עיצוב ובוחרים בקוד SQL
    ואז כותבים את ה-SQL שרוצים

  5. ניר טייב הגיב:

    זה הכינוי שנתתי לתוצאה של פונקצית
    COUNT

  6. ואיך אני מציג את מספר האשכולות
    בכל פורום?

  7. ניר טייב הגיב:

    ע"י cntFMessage
    זה השדה שמונה את מספר האשכולות בכל פורום (אם אתה עובד במבנה של parentId=0 זה הודעה ראשית אז ב-VIEW שים WHERE מתאים)

  8. הcount
    ספר את האשכולות בכל הפורומים ביחד או שספר לכל פורום לחוד (כמו שרציתי)?
    וכן אני עובד עם parent_id, הודעה ראשית אצלי היא 0

    ואיזה where לשים?

    תודה

  9. אה הבנתי עם cntFMessage
    אז עכשיו אני צריך לדעת רק איזה where לשים..

  10. ניר טייב הגיב:

    אתה צריך לשים
    את ה-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

  11. אני לא מכיר sp
    אבל אם זה מייעל את הקוד אני אשים
    רק יש לי כמה שאלות:
    1. מה זה הp_forumId?
    2. מה זה הX – number שכתבת למטה?
    3. איפה עוד אני צריך לכתוב את שם הsp חוץ מהקריאה אליו בasp?

    תודה

  12. ניר טייב הגיב:

    מספר תשובות
    יש על SP מידע ב-FAQ ומאמר שאני כתבתי אל השימוש בו באקסס.
    1. p_forumId זה פרמטר שמציין מאיזה פורום לשלוף (אתה קובע את הערך שלו)
    2. X – ה-ID של הפורום שממנו אתה שולף. המספר המועבר כפרמטר p_forumId ל-SP
    3.את שם ה-SP אתה מציין ביצירתו ובקריאה אליו (מה-ASP או ברמה אחרת)

  13. כתבתי את זה במסד:

    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

    מה זה אומר?

  14. *קראתי את המאמר על sp והבנתי
    אבל את הבעיה שלי כאן אני לא מצליח לפתור

  15. אוריקס הגיב:

    שאילתה כזאת לא תעבוד
    משום שאתה לא יכול לשלוף שדות שאתה לא מקבץ לפיהם/מפעיל עליהם פונקצית צבירה.

  16. אוריקס הגיב:

    שלוף רק את השדות שאתה מקבץ לפיהם
    או שאתה מפעיל עליהם פונקציות צבירה, אין דרך אחרת. ככה הוא לא יודע לאן לשייך כל עמודה.

  17. תודה אוריקס
    עשיתי מה שאמרת ועובד לי
    ותודה גם לניר

  18. חלוקה לעמודים
    אני מנסה לעשות חלוקה לעמודים כמו שניר הסביר במאמר על הפורום הרקורסיבי
    אז יצרתי את ה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

    (צירפתי להודעה את השגיאה)

  19. למה ההודעה לא קפצה אחרי
    ההודעה הקודמת שלי?

  20. ניר טייב הגיב:

    קודם כל
    השאילתא הזו צריכה להיות בעמוד ה-ASP
    X – זה מספר העמוד שאתה מקבל דרך ה-QS בעמוד ה-ASP

    וזה לא הוקפץ כי עברו חמישה ימים מההודעה הראשונה

  21. אה הבנתי
    הייתי צריך לשים 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"));

    מה הבעיה?
    תודה

שלח תשובה