2016-02-05 71 views
0

我有這個疑問:SQL加入其他表條件

SELECT * 
FROM `classes` 
JOIN `classes_students` 
ON `classes`.`id` = `classes_students`.`class` 

,我需要選擇剛剛類添加條件,在目前沒有登錄學生(用戶ID不是與類ID連接classes_students )並且還計算該班有多少學生。

表結構: 類:ID,名稱等 classes_students:類標識碼,USER_ID等

表數據:

classes: 
1 | test 
2 | test2 
3 | test3 

classes_students: 
1 | 1 
1 | 2 
2 | 3 
3 | 4 
3 | 5 

預期輸出,如果與ID 1的IM用戶: 類名稱(與學生人數):

2 (1 student) 
3 (2 students) 

所有這一切在一個查詢。有可能的?如果是,如何?

+2

也許。用一些數據設置一個SQLFiddle,我們可以幫你弄明白。如果不知道表結構並查看您想要的輸出示例,我們只會猜測。 –

+0

爲什麼一個查詢?向我們展示一些示例表格數據以及您希望從該查詢得到的結果。 – jarlh

+0

添加示例數據,謝謝。 –

回答

0
Select classid, count(*) 
from class 
    left join student on student.classid = class.classid 
group by classid 

很高興幫助你

+0

這顯示了我在哪裏上課,但我想顯示其他課程(哪裏不在)。 –

+0

你應該加上cla​​ss.classid不在(1,2,3,..)之前的組,由 – hungitk46

0

嘗試此查詢:

$user_id = 1; // current user_id 

$query = "SELECT `classes`.`id`, `classes`.`name`, COUNT(*) as students FROM `classes` 
      JOIN `classes_students` 
      ON `classes`.`id` = `classes_students`.`class_id` 
      AND `classes_students`.`user_id` != $user_id 
      GROUP BY `classes_students`.`class_id` 
      "; 
+0

是的,它的工作,但是當我的課是其他學生時,那個課也會出現。這不是我所期望的。 –

+0

@JeleanThomas,並不真正瞭解這一點「但是當我的課程是其他學生時,該課程也會顯示出來」。我以爲你想提取與當前登錄用戶無關的類。上面的查詢應該得到所有與當前用戶 – RomanPerekhrest

+0

沒有關係的類。但是當classes_students中的另一條記錄與另一個實際登錄的用戶相比時,它會顯示出來。你可以自己嘗試。 :) –

0

我想通了! :) 謝謝你們的幫助。

$user_id = 1; // current user_id 

$query = "SELECT `classes`.`id`, `classes`.`name`, COUNT(*) as students FROM `classes` 
      LEFT JOIN `classes_students` 
      ON `classes`.`id` = `classes_students`.`class_id` 
      WHERE `classes`.`id` NOT IN (SELECT `class_id` FROM `classes_students` WHERE `user_id`='.$user_id.') 
      GROUP BY `classes_students`.`class_id` 
      ";