צפיות
תשובות
קצת ידע ב-SQL אני צריך
אני שולף נתונים לצורך סקר כך :::
rs = Server.CreateObject("ADODB.Recordset")
rs.Open("SELECT COUNT(chooseID) AS CntChooseID FROM pp_hits WHERE chooseID=1",oConn)
num1 = parseInt(rs.Fields("CntChooseID"))
rs.Close
rs.Open("SELECT COUNT(chooseID) AS CntChooseID FROM pp_hits WHERE chooseID=2",oConn)
num2 = parseInt(rs.Fields("CntChooseID"))
rs.Close
rs.Open("SELECT COUNT(chooseID) AS CntChooseID FROM pp_hits WHERE chooseID=3",oConn)
num3 = parseInt(rs.Fields("CntChooseID"))
rs.Close
oConn.Close
delete rs,oConn
rs = null
אני כותב ב-JS בצד שרת (סתם הערה)
עכשיו לדעתי יש דרך אחרת כדי לשלוף את הנתונים בשאילתא אחת שתזרז כאן את העניינים למישהו יש רעיון
כי אני לא ממש יודע איזה מן שאילתא יכולה לשלוף לי מאותו שדה כל פעם משהו אחר וגם לחשב ושאני מתכוון למשהו אחר אני מתכוון ב-where אחר
בשאילתא אחת (שדומה לאחרות) כתבתי :::
SELECT COUNT(chooseID) AS CntChooseID FROM pp_hits WHERE chooseID=2
כמובן שאני אשכלל אותה לשאילתא שתזהה גם את ה-ID של הסקר
אבל למשיהו יש רעיון איך לשפר את השליפה כדי שהשליפה תתבצע בשאילתא אחת ולא ב-שלוש שאילתות ???
26 תשובות
נסה כך:
כך….
סורי…
rs.Open("SELECT COUNT(chooseID) FROM GROUP BY chooseID, oConn)
תגובה…
הקוד שלי עובד פשוט לדעתי הוא מבזבז הרבה משאבים של השרת ובכך עושה את ההצגה של הנתונים לאט יותר ולכן אני רוצה לדעת אם יש אפשרות לשאילתא אחרת שתכלול את שלושת השאילותות שלי בצורה מסוימת
ככה עושים את זה…..
"SELECT COUNT(chooseID) AS CntChooseID FROM pp_hits WHERE chooseID IN (1,2,3)"
או, לחילופין, שימוש ב OR…
אני לא זוכר איזה מהם יותר יעיל, אבל אפשר לבדוק את זה בקלות.
אני לא מבין…
זה בדיוק היעוד המקורי של Group By…
ותיקון קטן:
rs.Open("SELECT COUNT(chooseID) FROM pp_hits GROUP BY chooseID, oConn)
שאלה בנוסף…
נגיד ואני משתמש בשאילתא של mrmistroy איך אני מכניס את הנתונים לשלושה
משתנים כאשר בכל משתנה יש נתונים אחרים נגיד ב-num1 אני רוצה שיהיה COUNT של כל ה-chooseID שערכם 1 ואני רוצה להשתמש בשאילתא הזו
אבל אם למישהו יש רעיון יותר טוב אז בבקשה
אם אני זוכר נכון,
GROUP BY הרבה יותר "יקרה" מבחינת משאבים מאשר OR או IN ב WHERE.
למרות שלפי שאלת ההמשך, GROUP BY הוא בהחלט הפתרון הנדרש…
אם אני לא טועה…
Where לא יתן לך את התוצאה הרצוייה, מכיוון שהוא יכניס לספירה רק את השדות שבהם ה chooseID שווה ל1,2,3 או 4… אך הוא עדיין יחזיר רשומה אחת…
כן, תשתמש ב Group by, כמו שהציע
אוריקס, רק שכלל אותו טיפה:
SELECT chooseID, COUNT(chooseID) AS CountChooseID FROM pp_hits GROUP BY chooseID
אני מקווה שדי ברור לך מה תקבל ב recordset, ולמה. אם יש צורך בהסברים נוספים, אנחנו עדיין כאן…
אתה לא טועה בכלל… אני טעיתי…
סופסוף הגענו להסכמה
OR הרבה יותר יעיל
אפשר קצת…
הסברים כי לא הבנתי איך השאילתא הזאת תעזור לי ???
ואיך אני מפריד בין הנתונים
הסבר על Group By
בעקרון Group By משמשת בכדי לעשות מעין "הפרדה" על פונקציות צבירה…
למשל, אם יש לי טבלה כזאת:
student_id city
1 jerusalem
2 jerusalem
3 tel aviv
4 jerusalem
5 hafa
6 tel avia
נריץ עליה שאילתא כזאת:
Select count(student_id), city From tbl Group By city Order By student_id DESC
ויתקבל פלט כזה:
3 jerusalem
2 tel aviv
1 haifa
מה עשינו כאן? במקום לסכום "רגיל" בעצם הורינו לו להפריד כשהוא סוכם… Group By city כלומר סכום ותפריד לפי City – התייחס לכל העמודות שיש בהן אותו city כטבלה נפרדת…
טוב הבנתי את הכוונה אבל
איך אני מציב את הנתונים בתוך משתנים
אתה לא בדיוק מציב במשתנים
המשפט שנתנו לך בתוספת קטנה:
SELECT chooseID, COUNT(chooseID) AS CountChooseID FROM pp_hits GROUP BY chooseID ORDER BY chooseID
מחזיר לך טבלה מסודרת לפי choose_ID, כלומר מספר התשובה הגבוהה ביותר יהיה "למעלה". לכן אם יש לך 4 תשובות – 1,2,3,4 אז אתה יודע שקודם אתה מתייחס לתשובה 4, אח"כ ל-3 וכו'.
בהצלחה
שאלה קטנה
זה לא אמור להיות לפי סדר רגיל כאילו 1,2,3,4 וככה כי אין את המילה DESC בסיום הפסוקית ORDER BY
זה עניין הצגתי, לנוחיותך
שאלה קיטבק
עכשיו אני רוצה להוסיף עוד משהו…
אני רוצה להוסיף שדה מטבלה אחרת אז עשיתי את השאילתא הבאה :::
SELECT pp_hits.chooseID, COUNT(pp_hits.chooseID) AS CountChooseID, pp_choose.chooseDesc AS chooseDesc FROM pp_hits,pp_choose WHERE pp_hits.id=" + Request.QueryString("id") + " GROUP BY pp_hits.chooseID, pp_choose.chooseDesc ORDER BY pp_hits.chooseID
וכשאני מיג את הנתונים משום מה הוא חוזר לי על הכל 3 פעמיםיענו במקום שזה יציג לי כך :::
איימי לי 1 2
אמינם 1 2
כריסטינה אגילרה 1 2
זה מציג לי כך :::
איימי לי 2 1
אמינם 2 1
כריסטינה אגילרה 2 1
איימי לי 3 4
אמינם 3 4
כריסטינה אגילרה 3 4
במה טעיתי בשאילתא
וזה הקוד שעשיתי כדי להציג :::
while (!rs.EOF){
Response.Write( rs.Fields("chooseDesc") + " " + rs.Fields("chooseID") + " " + rs.Fields("CountChooseID") + "<br>" )
rs.MoveNext
}
תודה מראש ניר
את התוצאה…
***זה מציג לי כך :::
איימי לי 2 1
אמינם 2 1
כריסטינה אגילרה 2 1
איימי לי 3 4
אמינם 3 4
כריסטינה אגילרה 3 4
כך זה מציג :::
איימי לי 1 2
אמינם 1 2
כריסטינה אגילרה 1 2
איימי לי 2 1
אמינם 2 1
כריסטינה אגילרה 2 1
איימי לי 3 4
אמינם 3 4
כריסטינה אגילרה 3 4
dutty up
בבקשה
הבעיה…
נפתרה עשיתי איחוד לא נכון הפרמטרים לאיחוד היו שגועים הנה השאילתא הנכונה
"Select pp_hits.chooseID, COUNT(pp_hits.chooseID) AS CountChooseID,pp_choose.chooseDesc AS chooseDesc FROM pp_hits, pp_choose WHERE pp_hits.id=" + Request.QueryString("id") + "and pp_hits.chooseID = pp_choose.chooseID GROUP BY pp_hits.chooseID,pp_choose.chooseDesc ORDER BY pp_hits.chooseID