ABA


"עזרה בשאילתת MySQL"
גירסת הדפסה        
קבוצות דיון בניית אתרים נושא #15048 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 15048
vintox

דרג אמינות חבר זה
   22:00   17.05.09   
אל הפורום  
  עזרה בשאילתת MySQL  
 
   יש לי בעיה עם השאלתה הבאה

SELECT p.*,COUNT(reply) as rcount
FROM reply r
LEFT JOIN posts p
ON p.id = r.post GROUP BY r.post
UNION
SELECT p.*,COUNT(reply) as rcount
FROM reply r
RIGHT JOIN posts p
ON p.id = r.post GROUP BY r.post
WHERE COUNT(reply) IS NULL

אני מקבל שגיאת תחביר
ניסיתי כל דרך אפשרית אבל כנראה שהחלק של ה WHERE
הורס את השאילתא

תודה מראש לעוזרים


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  אממ אני חושב שהבעיה שלך היא akoka 17.05.09 22:04 1
     לא זה בסדר הקיצור של הטבלה לאות vintox 17.05.09 22:07 2
         אממ הבנתי אותך:) akoka 17.05.09 22:35 3
             אגב אני חושב שהשאילתא הזאת תעבוד, akoka 17.05.09 22:40 4
  תבין akoka vintox 17.05.09 22:54 5

       
akoka

דרג אמינות חבר זה
   22:04   17.05.09   
אל הפורום  
  1. אממ אני חושב שהבעיה שלך היא  
בתגובה להודעה מספר 0
 
   בקטע של ה posts p אתה צריך לשנות את זה לposts AS p.
ובמקום UNION הייתי מפריד את זה ל2 שאילתות נפרדות.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
vintox

דרג אמינות חבר זה
   22:07   17.05.09   
אל הפורום  
  2. לא זה בסדר הקיצור של הטבלה לאות  
בתגובה להודעה מספר 1
 
   אבל אני מנסה לעשות את זה בשאילתא אחת במקום לעשות לולאה של שאילתות
קיים דבר שנקרא FULL OUTER JOIN
הבעיה היא שהפונקציה הזאת לא קיימת במסד הנתונים MySql
דבר שיכול להפוך את השאילתות למאוד מאוד יעילות


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
akoka

דרג אמינות חבר זה
   22:35   17.05.09   
אל הפורום  
  3. אממ הבנתי אותך:)  
בתגובה להודעה מספר 2
 
   כדי לממש FULL OUTER JOIN בMYSQL ולקבל את כול השורות מכול הטבלאות, לא מספיק להשתמש בLEFT JOIN וRIGHT JOIN אתה צריך פשוט לכתוב LEFT OUTER JOIN
וRIGHT OUTER JOIN ולעשות UNION ל2 הטבלאות.

חח ואת האמת זה די מפגר שאין את האופציה של FULL OUTER JOIN זה די יעיל, למרות שעם קצת מחשבה אפשר לבצע את זה בשאילתא אחת.

ועוד משהו אחד, תבדוק לגבי CROSS JOIN יכול ליהיות שזה מה שאתה צריך.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
akoka

דרג אמינות חבר זה
   22:40   17.05.09   
אל הפורום  
  4. אגב אני חושב שהשאילתא הזאת תעבוד,  
בתגובה להודעה מספר 3
 
  

SELECT
p.* AS p_tbl,
posts.* AS posts_tbl,
COUNT(reply) AS rcount
FROM p,posts,reply AS r
WHERE p_tbl.id=r.post GROUP BY r.post


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
vintox

דרג אמינות חבר זה
   22:54   17.05.09   
אל הפורום  
  5. תבין akoka  
בתגובה להודעה מספר 0
 
   כל שאילתה תביא לי את הרשומות אשר יש בהן התאמה של שני הטבלאות יחדיו
אבל רק בעזרת FULL ניתן לקבל רשומות אשר נמצאות ללא התאמה בשני הטבלאות אלא רק באחת מהן כך שגם אם אין תגובות לפוסט מסויים עדיין הפוסט יתקבל בשאילתא

ולכן גם CROSS JOIN לא מתאים
ראיתי שעוד כמה אנשים נתקבלו בבעיה כאשר מבצעים GROUP וגם JOIN


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net