2011-01-26 26 views
5

我有一張桌子,一個班級,還有一張我稱之爲「課程」的桌子 - 也就是某個特定的人在特定地點教授的課程實例。我想拉一張表,基本上只是根據某些課程參數向我顯示哪些類是活動的。例如:我可以連接兩個表,只有一個匹配的每個表中的一行MySQL的?

 
CLASSES 
class_id|class_name 
--------|------------ 
     1|Class One 
     2|Class Two 
     3|Different Class 
etc... 

COURSES 
course_id|class_id|room 
---------|--------|-------- 
     1|  3|  1 
     2|  3|  2 
     3|  1|  1 
     4|  3|  1 
     5|  3|  2 
     6|  2|  1 
etc... 

我不知道是否有一種方式,我可以得到類似SELECT classes.* FROM classes JOIN courses ON classes.class_id=courses.class_id WHERE courses.room=1返回各只有一個類的實例。發生了什麼事是,我得到只是發生在室1類,但我發現每一個的多個實例,因爲在房間的課程表類的多個實例1

我已經嘗試了所有不同種類的JOIN - 左,右,內部等 - 並且因爲我從一張桌子上根據另一張桌子的規格拉出,他們似乎都給了我相同的結果。

所以我越來越:

 
class_id| class_name |course_id|room 
--------|--------------|---------|-------- 
     1|Class One  |  3|  1 
     2|Class Two  |  6|  1 
     3|Diferent Class|  1|  1 
     3|Diferent Class|  4|  1 
etc... 

但我只想得到:

 
class_id| class_name |course_id|room 
--------|--------------|---------|-------- 
     1|Class One  |  3|  1 
     2|Class Two  |  6|  1 
     3|Diferent Class|  1|  1 
etc... 

我可以只JOIN關於在類的每一行的第一場比賽?我對MySQL很有新意,所以我在表達我想要做的事情時遇到了一些麻煩;我道歉。

另外:我通過PDO把所有這一切都拉進了PHP - 也許有一種具體的方法可以在PDO中完成這個任務嗎?

+1

如果您只需要COURSES表中的一條記錄,那麼您需要哪些記錄? IE:總是最低的courseid(&room?)值? – 2011-01-26 22:08:41

+0

說實話無所謂。你說得對,我應該說。我只是想要CLASSES數據;我要參加課程的唯一原因是隻獲得那些具有正確標準的相應課程的課程。 – 2011-01-26 22:29:40

回答

8
SELECT 
    classes.class_id, 
    classes.name, 
    courses.room 
FROM classes 
    JOIN courses 
     ON classes.class_id=courses.class_id 
WHERE courses.room=1 
GROUP BY classes.class_id,classes.name,courses.room 

GROUP BY允許您彙總結果在指定的,所以(在這種情況下)等領域將採取只是(classes.class_id,classes.name,courses.room)

有關詳細信息,獨特的元組 http://dev.mysql.com/doc/refman/5.0/en/group-by-hidden-columns.html

2
SELECT cl.class_id, cl.class_name, c.course_id, c.room 
FROM classes cl 
JOIN courses c 
ON  c.course_id = 
     (
     SELECT ci.course_id 
     FROM courses ci 
     WHERE ci.class_id = cl.class_id 
       AND ci.room = 1 
     ORDER BY 
       ci.class_id, ci.course_id -- or whatever 
     LIMIT 1 
     ) 

通過在子查詢改變ORDER BY條款,您可以定義的類將返回(即用最少的或最大的id等)

+1

這似乎工作,但它花了phpMyAdmin 76秒執行。任何想法可能會導致這種情況? – 2011-01-26 22:41:21

相關問題