שלח תשובה

זירת השאלות

584
צפיות
30
תשובות

בעיה

,‏ 6 במרץ, 2004

אז ככה…
אני משתמש בשיטת בחירה


SQL = "SELECT Top 5 KATAVA.id, KATAVA.subject,KATAVA.the_date,KATAVA.brief_text,KATAVA.hits,KATAVA.pic_des,"
SQL = SQL & " MANAGER.full_name FROM MANAGER INNER JOIN KATAVA ON MANAGER.id = KATAVA.manager_id"


ועל מנת לקבל את התוצאות של ה-sql אני משתמש ב


RecID = rsArray(0,i)
RecSubj = rsArray(1,i)
RecDate = rsArray(2,i)
RecBrief = rsArray(3,i)
RecHits = rsArray(4,i)
RecPic = rsArray(5,i)
RecAuthor = rsArray(6,i)


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

תגיות:

30 תשובות

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

    אתה יכול-
    א. לקרוא במדריך חלוקה לעמודים באתר.
    ב. לעשות משהו כזה:

    SELECT TOP 5 id FROM tbl WHERE id NOT IN (SELECT TOP 5 id FROM tbl)

  2. Yarden הגיב:

    קודם כל בשביל לעשות עמודים לא עושים
    Select Top
    אני יתן לך קוד לגומא..

    <%@ Language=VBScript %>
    <HTML>
    <HEAD><TITLE> Your Title </TITLE></HEAD>
    <BODY>
    <%
    DIM currentPage, rowCount, i
    currentPage = TRIM( Request( "currentPage" ) )
    if currentPage = "" then currentPage = 1
    Set con = Server.CreateObject("ADODB.Connection")
    Con.open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("db.mdb") & ";"
    Set RS = Server.CreateObject("ADODB.Recordset")
    RS.CursorType = adOpenStatic
    RS.PageSize = 5
    RS.Open "SELECT title FROM title ORDER BY title", Con
    Rs.AbsolutePage = cINT( currentPage )
    rowCount = 0
    While not RS.EOF and rowCount < RS.PageSize
    Response.Write RS("title") & "<BR>"
    rowCount = rowCount + 1
    RS.MoveNext
    Wend
    Response.Write "<BR>"
    for i = 1 to RS.PageCount
    %>
    <A HREF="Paging.asp?currentPage=<%=i%>"><%=i%></A>
    <%
    next
    %>
    </BODY>
    </HTML>

    תקרא לדף Paging.asp

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

    ךגטׁ
    ׀א י גיך ׳ױחװ ׃ה ג select top װ׃ט װ ״ױׁװ ײװ ׁטך װ-SQL ײ"׀ ׁײ װיהװ ײװ ךׁזג ױ׀ ׀׳ט װיהװ ׀יט טיױױך װױױך גׁױ׃

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

    אתה טועה
    למה לעבור על כל הטבלה כשאפשר במשפט SQL פשוט לסדר את זה?

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

    צודק
    מתערבים שכך הפורום הזה בנוי

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

    אני לא חושב
    לשיטה הזאת יש חסרון – אתה לא יודע כמה רשומות יש. אני מניח שאם הם על SQL SERVER הם תכנתו משהו יותר חכם (גם ברמת ה SQL)

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

    שכחתי
    שהם עברו שרת ל-sql SErver.
    אבל אני למשל לא צריך לדעת כמה רשומות יש בטבלה אני עשיתי בדיקה על ה-queryString שאם הערך שווה לאפס/אחד אז זה עושה שליפה רק של הרשומות הראשונות בלי ה- not in ואם גדול מאפס/אחד אז שיעשה את השאילתא עם ה-not in


    if Request.QueryString("pageId")<=1 then
    sqlQuery = "SELECT TOP 15 tbl.* FROM tbl ORDER BY tbl.id DESC"
    else
    sqlQuery = "SELECT TOP 15 tbl.* FROM tbl WHERE tbl.id not IN(SELECT TOP 15 tbl.* FROM tbl ORDER BY tbl.id DESC) ORDER BY tbl.id DESC
    End if
    rs.open sqlQuery, oConn, 3

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

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

    תיקון
    זה הקוד

    pageID = cint(Request.QueryString("pageId")-1)
    if pageID<=0 then
    sqlQuery = "SELECT TOP 15 tbl.* FROM tbl ORDER BY tbl.id DESC"
    else
    sqlQuery = "SELECT TOP 15 tbl.* FROM tbl WHERE tbl.id not IN(SELECT TOP " & cint(pageID*15) & " tbl.* FROM tbl ORDER BY tbl.id DESC) ORDER BY tbl.id DESC"
    End if
    rs.open sqlQuery, oConn, 3

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

    עדיין אין לך אפשרות לדעת כמה רשומות
    יש לך סה"כ בכל הדף.

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

    יש לך בלבלה
    בטח שאני יודע כמה רשומות יש לי בעמוד לא סתם אני בוחר ב-15 * (בקואריסטרינג-1) רשומות מתוך הטבלה

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

    תיקון
    ב-15 ההודעות הראשונות אחרי ה-15 הודעות הראשונות כפול ערך ה-queryString

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

    אתה לא יכול לדעת בשיטה הזו כמה
    רשומות יש לך סה"כ בטבלה.
    כלומר – באיזה עמוד אתה מתוך כמה עמודים.

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

    צודק
    אבל אני עשיתי דבר כזה. פתחתי שוב RS ובשאילתא ביקשתי רק את ה-count הצבתי אותו בתוך משתנה וישר סגרתי ואז עשיתי הכל בלקוח

    SELECT COUNT(fixedForum.rootID) as total FROM fixedForum

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

    תענו בעצמכם.

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

    שמור באפליקציה,
    אתה מספר הרשומות.

    ובעזרת T-SQL ניתן להמנע מזה…

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

    אני עובד באקסס
    ולמה אתה מתכוון אני שולף רק חלק קטן מהרשומות אני לא שולף את כולן

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

    אין קשר.
    התכוונתי שאתר יכול לשמור במשתנה אפליקציה את מספר הרשומות בטבלה.

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

    אבל
    אני לא יכול לדעת כמה רשומות יש לי לפני שאני שולף וכשאני שולף את הרשומות בשיטה של select top אני בוחר מס' מסוים של רשומות וגם אני משתמש ב-group by אז בכלל בכל מקרה אני לא חייב את זה

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

    אתה בעצמך אמרת שיש לך עוד שאילתא
    שבה אתה פותר הכל ועושה rs.recordcount(), אז לא עדיף כמו שאני אומר…

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

    הא חשבתי
    מהשליפה הראשונה של ה-15 ולא זה לא עדיף כך עלות לאפליקיישן כי זה מועבר ישר לצד הלקוח ושם נעשה החישוב וכל השאר

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

    שמירה באפליקיישן
    עדיפה על שתי שאילתות בכל פעם

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

    אוקיי.
    בשביל לדעת באיזה עמוד אתה מתוך כמה – אתה צריך 2 שאילתות… עד כאן אנחנו מסכימים. אז אני אומר לך שמקום לפתוח סתם שאילתא רק כדי לדעת כמה רשומות יש לך מספיק שתשמור באפליקיישן את סה"כ הרשומות בטבלה.

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

    ואיך אני עושה
    זאת בשאילתא אחת אם זו השאילתא שלי

    SELECT forum.id, forum.parentID, forum.subject, forum.message, forum.date, forum.rootID

    FROM forum

    WHERE forum.rootID in (SELECT TOP 20 fixedForum.rootID FROM fixedForum WHERE rootID not in (SELECT TOP " & (20*x) & " rootID FROM fixedForum ORDER BY fixedForum.rootID DESC, fixedForum.MAXdate DESC) ORDER BY fixedForum.rootID DESC, fixedForum.MAXdate DESC)

    GROUP BY forum.id, forum.parentID, forum.subject, forum.message, forum.date, forum.rootID

    ORDER BY forum.rootID, forum.parentID DESC, forum.date, forum.id;

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

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

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

    זה בדיוק הקטע –
    אתה לא יכול.
    שמור באפליקציה את מספר הרשומות בטבלה, וכך לא תצטרך את השאילתא השנייה…
    מה לא ברור פה?

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

    זה מה שלא ברור
    איך אני מגיע אל מספר הרשומות עם אני לא יודע אותם

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

    rs.recordcount() בפעם הראשונה
    ואז בהוספת רשומה תוסיף לאפליקציה 1…

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

    קבל…
    בפורום רקורסיבי אי אפשר לעשות rs.Recordcount זה לא שאי אפשר אבל גם תגובות נחשבות כרשומות שבתוך הרקורדסט ולכן אם אני אכתוב את זה אני אקבל את מס' ההודעות שיש בכל הדף (כולל תגובות) ומה שאני מחפש זה רק כמה rootIDים יש לי בכל הפורום ולכן אני עשיתי עוד פתיחת רקורדסט שלורחת לי את ה-count של ה-rootId ואז חישובים בלקוח

שלח תשובה