לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

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



  #1  
ישן 21-01-2009, 19:42
צלמית המשתמש של tnadav1
  משתמש זכר tnadav1 tnadav1 אינו מחובר  
 
חבר מתאריך: 02.10.05
הודעות: 2,355
שלח הודעה דרך MSN אל tnadav1
Join, MySQL ושליפה ממספר טבלאות לא מתערבב.. למה?

יש לי את השאילתה הבאה:
קוד:
SELECT `cadets`.`fname`, `cadets`.`lname`, `work_hours`.`startHour`, `work_hours`.`endHour`, `work_hours`.`purposeTime`, `work_hours`.`personId`, `classes_session_attend`.`attend` FROM `cadets`, `classes`, `cadets_classes`, `work_hours` LEFT JOIN `classes_session_attend` ON `classes_session_attend`.`classId` = `classes`.`id` AND `classes_session_attend`.`cadetId` = `cadets`.`id` AND `classes_session_attend`.`hourId` = `work_hours`.`id` WHERE `classes`.`id` = 1 AND `cadets_classes`.`classId` = `classes`.`id` AND `cadets_classes`.`cadetId` = `cadets`.`id` AND `classes`.`id` = `work_hours`.`statusId` AND `work_hours`.`isEmp` = 0 AND `work_hours`.`job` = TRUE

שאני מריץ אותה ב- phpMyAdmin אני מקבל את השגיאה הבאה:
קוד:
#1054 - Unknown column 'classes.id' in 'on clause'

הבנתי שה- JOIN עושה את הבעיות, וזה לא ממש מתערבב עם שליפה ממספר טבלאות בדרך השנייה (שהתרגלתי אלייה מאוד, הרבה יותר נוח לי, ב- JOIN אני בקושי משתמש)
השאלה הראשונה שלי אם זה באמת נכון, ושאי-אפשר לשלוף ממספר טבלאות בשני דרכים באותה שאילתה.
והשאלה השנייה זה אם כן, איך מעבירים את השאילתה ל-JOIN?
אני חייב להשתמש ב- LEFT JOIN, אבל לכל השאר אני חייב לא להשתמש ב- LEFT JOIN.. ובכלל כל הקטע של JOIN לא יושב לי טוב על הראש.

ולסיום, תצלומי מסך של הטבלאות מ- phpMyAdmin:
cadets
https://2009-uploaded.fresh.co.il/2...21/50479777.png
cadets_classes
https://2009-uploaded.fresh.co.il/2...21/38471732.png
classes
https://2009-uploaded.fresh.co.il/2...21/48746104.png
classes_session_attend
https://2009-uploaded.fresh.co.il/2...21/73757409.png
work_hours
https://2009-uploaded.fresh.co.il/2...21/30176411.png
_____________________________________


תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #4  
ישן 22-01-2009, 19:12
  משתמש זכר dorM dorM אינו מחובר  
מנהל
 
חבר מתאריך: 26.07.08
הודעות: 6,473
בתגובה להודעה מספר 3 שנכתבה על ידי tnadav1 שמתחילה ב "אני יודע מה זה JOIN ואיך..."

אני חושב שזה קשור לזה:

ציטוט:
במקור נכתב על ידי http://dev.mysql.com/doc/refman/5.0/en/join.html
INNER JOIN and , (comma) are semantically equivalent in the absence of a join condition: both produce a Cartesian product between the specified tables (that is, each and every row in the first table is joined to each and every row in the second table).

However, the precedence of the comma operator is less than of INNER JOIN, CROSS JOIN, LEFT JOIN, and so on. If you mix comma joins with the other join types when there is a join condition, an error of the form Unknown column 'col_name' in 'on clause' may occur. Information about dealing with this problem is given later in this section.

http://dev.mysql.com/doc/refman/5.0/en/join.html

פשוט תשתמש ב- CROSS JOIN.
בעמוד הבא: http://www.wellho.net/mouth/513_MyS...correctly-.html
מוסבר מדוע כדאי להשתמש ב-JOIN (שבשביל MYSQL זה בדיוק CROSS JOIN) לעומת פסיקים ופיסקת WHERE.
לתאימות עם ה- Standard SQL, אמרתי שתשתמש ב-CROSS JOIN, כפי שכתוב בעמוד ה- MYSQL JOIN שקישרתי אליו למעלה.

כלומר הקוד צריך להיות:
קוד:
SELECT `cadets`.`fname`, `cadets`.`lname`, `work_hours`.`startHour`, `work_hours`.`endHour`, `work_hours`.`purposeTime`, `work_hours`.`personId`, `classes_session_attend`.`attend` FROM `cadets` CROSS JOIN `classes` CROSS JOIN `cadets_classes` CROSS JOIN `work_hours` LEFT JOIN `classes_session_attend` ON `classes_session_attend`.`classId` = `classes`.`id` AND `classes_session_attend`.`cadetId` = `cadets`.`id` AND `classes_session_attend`.`hourId` = `work_hours`.`id` WHERE `classes`.`id` = 1 AND `cadets_classes`.`classId` = `classes`.`id` AND `cadets_classes`.`cadetId` = `cadets`.`id` AND `classes`.`id` = `work_hours`.`statusId` AND `work_hours`.`isEmp` = 0 AND `work_hours`.`job` = TRUE
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

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

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 22:28

הדף נוצר ב 0.07 שניות עם 12 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2024 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר