2017-08-17 137 views
0

我在php和mysql中爲學校創建考勤管理系統。我在數據庫中3代表它們是:在多個表上使用多個查詢從多個表中獲取數據

1. Students 
id 
student_name 
class 

2. subjects 
id 
subjects 


3. attendances 
id 
subject_id 
student_id 
attend (boolean) 
today_date 

我只儲存誰出席出席表班學生。

我想獲取參加或不參加特定班級,日期和主題的所有學生(在或不在參加表中)的列表。

贊;

Attendance for Class - X(Physics) on 18-08-2017 

    ______________________________ 
    | Student Name | Attendance | 
    ------------------------------ 
    | Foo   |  0  | 
    | Bar   |  1  | 
    | Baz   |  0  | 
    | Qux   |  1  | 
    ------------------------------ 

我試圖查詢

SELECT s.id,s.student_name, a.attend as attend 
FROM attendances as a 
INNER JOIN students as s on s.id = a.student_id 
WHERE s.class = 'X' 
AND a.subject_id = 3 
AND a.date = '2017-08-18' 

但我沒有得到我想要的結果。我相信會有一些更好,更簡單的方法來實現這一點,但我沒有這樣使用SQL。

回答

1

下面的查詢可能會幫助你實現理想的結果:

SELECT s.id,s.student_name, IFNULL(a.attend, 0) as attend FROM students as s LEFT JOIN attendances as a on s.id = a.student_id WHERE s.class = 'X' AND a.subject_id = 3 AND a.date = '2017-08-18' 
+0

謝謝,但這給人僅在出勤表中可用的學生,但我想這是在出勤或不可用所有的學生。 – Cody

+0

使用右連接。 –

+0

我試過,但結果相同。我認爲這是因爲這些條件「a.subject_id = 3 AND a.date ='2017-08-18'」它正在給出這個結果。有沒有辦法來操縱這些條件。 – Cody

1
SELECT s.id,s.student_name, a.attend as attend FROM attendances as a 
RIGHT JOIN students as s on s.id = a.student_id AND a.subject_Id=3 
AND a.date='2017-08-18' WHERE s.class = 'X' 
+0

請將格式添加到您的代碼中(至少通過突出顯示您的代碼並在您的鍵盤上按Ctrl + K) – dwirony

+0

對不起,我是這個新東西.... –

+0

沒問題,我看到這是你的第一個答案,只是想幫助:) – dwirony