584
צפיות
צפיות
30
תשובות
תשובות
בעיה
אז ככה…
אני משתמש בשיטת בחירה
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 תשובות
אתה יכול-
א. לקרוא במדריך חלוקה לעמודים באתר.
ב. לעשות משהו כזה:
SELECT TOP 5 id FROM tbl WHERE id NOT IN (SELECT TOP 5 id FROM tbl)
קודם כל בשביל לעשות עמודים לא עושים
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
ךגטׁ
׀א י גיך ׳ױחװ ׃ה ג select top װ׃ט װ ״ױׁװ ײװ ׁטך װ-SQL ײ"׀ ׁײ װיהװ ײװ ךׁזג ױ׀ ׀׳ט װיהװ ׀יט טיױױך װױױך גׁױ׃
אממממממ……
הינה קוד:
http://asp.org.il/samples/paging_rec_getrows/paging_rec_getrows_txt.asp
אתה טועה
למה לעבור על כל הטבלה כשאפשר במשפט SQL פשוט לסדר את זה?
צודק
מתערבים שכך הפורום הזה בנוי
אני לא חושב
לשיטה הזאת יש חסרון – אתה לא יודע כמה רשומות יש. אני מניח שאם הם על SQL SERVER הם תכנתו משהו יותר חכם (גם ברמת ה SQL)
שכחתי
שהם עברו שרת ל-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
ואחרי הפתיחה אני בודק אם יש רשומות ואם אין אז אני כותב הודעה מיוחדת
תיקון
זה הקוד
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
עדיין אין לך אפשרות לדעת כמה רשומות
יש לך סה"כ בכל הדף.
יש לך בלבלה
בטח שאני יודע כמה רשומות יש לי בעמוד לא סתם אני בוחר ב-15 * (בקואריסטרינג-1) רשומות מתוך הטבלה
תיקון
ב-15 ההודעות הראשונות אחרי ה-15 הודעות הראשונות כפול ערך ה-queryString
אתה לא יכול לדעת בשיטה הזו כמה
רשומות יש לך סה"כ בטבלה.
כלומר – באיזה עמוד אתה מתוך כמה עמודים.
צודק
אבל אני עשיתי דבר כזה. פתחתי שוב RS ובשאילתא ביקשתי רק את ה-count הצבתי אותו בתוך משתנה וישר סגרתי ואז עשיתי הכל בלקוח
SELECT COUNT(fixedForum.rootID) as total FROM fixedForum
נכון זה איטי אבל אין מה לעשות זה או חלוקה קלה או ספירת עמודים קלה מה עדיף?
תענו בעצמכם.
שמור באפליקציה,
אתה מספר הרשומות.
ובעזרת T-SQL ניתן להמנע מזה…
אני עובד באקסס
ולמה אתה מתכוון אני שולף רק חלק קטן מהרשומות אני לא שולף את כולן
אין קשר.
התכוונתי שאתר יכול לשמור במשתנה אפליקציה את מספר הרשומות בטבלה.
אבל
אני לא יכול לדעת כמה רשומות יש לי לפני שאני שולף וכשאני שולף את הרשומות בשיטה של select top אני בוחר מס' מסוים של רשומות וגם אני משתמש ב-group by אז בכלל בכל מקרה אני לא חייב את זה
אתה בעצמך אמרת שיש לך עוד שאילתא
שבה אתה פותר הכל ועושה rs.recordcount(), אז לא עדיף כמו שאני אומר…
*פותר = פותח
הא חשבתי
מהשליפה הראשונה של ה-15 ולא זה לא עדיף כך עלות לאפליקיישן כי זה מועבר ישר לצד הלקוח ושם נעשה החישוב וכל השאר
שמירה באפליקיישן
עדיפה על שתי שאילתות בכל פעם …
לא הבנתי אותך
אוקיי.
בשביל לדעת באיזה עמוד אתה מתוך כמה – אתה צריך 2 שאילתות… עד כאן אנחנו מסכימים. אז אני אומר לך שמקום לפתוח סתם שאילתא רק כדי לדעת כמה רשומות יש לך מספיק שתשמור באפליקיישן את סה"כ הרשומות בטבלה.
ואיך אני עושה
זאת בשאילתא אחת אם זו השאילתא שלי
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;
המשך
אני בונה פורום רקורסיבי וזה קצת קשה לעשות הכל בשאילתא אחת
זה בדיוק הקטע –
אתה לא יכול.
שמור באפליקציה את מספר הרשומות בטבלה, וכך לא תצטרך את השאילתא השנייה…
מה לא ברור פה?
זה מה שלא ברור
איך אני מגיע אל מספר הרשומות עם אני לא יודע אותם
rs.recordcount() בפעם הראשונה
ואז בהוספת רשומה תוסיף לאפליקציה 1…
קבל…
בפורום רקורסיבי אי אפשר לעשות rs.Recordcount זה לא שאי אפשר אבל גם תגובות נחשבות כרשומות שבתוך הרקורדסט ולכן אם אני אכתוב את זה אני אקבל את מס' ההודעות שיש בכל הדף (כולל תגובות) ומה שאני מחפש זה רק כמה rootIDים יש לי בכל הפורום ולכן אני עשיתי עוד פתיחת רקורדסט שלורחת לי את ה-count של ה-rootId ואז חישובים בלקוח