在多个表上使用多个查询从多个表中获取数据

问题描述:

我在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。

下面的查询可能会帮助你实现理想的结果:

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

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