左连接不在PHP工作

时间:2015-10-23 03:34:44

标签: php mysql

我有一张'学生'表和'出勤'表 如果学生缺席,我只需在考勤表中输入学生证和日期。 现在我想要检索所有学生和他们在特定日期的出勤率 但是,当我尝试离开加入时,它会向我提供特定日期缺席的特定学生的数据

表'学生'结构和样本数据:

id|name (varchar field)
1 |xxx
6 |yyy

表'出勤'结构和样本数据:

id|date (date field)|student_id (integer field)
1 |2015-10-15       | 1
1 |2015-10-16       | 6

我的查询

SELECT *
FROM student.id, student.name, attendance.date
  LEFT JOIN attendance
    ON student.id = attendance.student_id
WHERE attendance.date = '2015-10-15'

输出

1   xxx 2015-10-15

但是必需的输出是

1   xxx 2015-10-15
6   yyy NULL (or a blank)

2 个答案:

答案 0 :(得分:1)

对于您希望的输出,您需要将条件myApp.directive('notOnMobile', function($compile) { // Perform detection. // This code will only run once for the entire application (if directive is present at least once). // Can be moved into the compile function if detection result needs to be passed as attribute. var onMobile = false; return { terminal:true, priority:1001, compile: function compile(tElement, tAttrs) { if (!onMobile) tElement.attr(tAttrs.notOnMobile, ''); tElement.removeAttr('not-on-mobile'); return function postLink(scope, element) { $compile(element)(scope); }; } }; }); attendance.date = '2015-10-15'子句移动到WHERE子句:

ON

在这种情况下,将在加入期间使用日期。如果在SELECT student.id, student.name, attendance.date FROM student LEFT JOIN attendance ON student.id = attendance.student_id AND attendance.date = '2015-10-15' 子句中使用它,则在数据加入后进行过滤,因此过滤掉所需输出的第二行

这是展示解决方案的SQL Fiddle

答案 1 :(得分:0)

您缺少主表。您需要将FROM移动到SELECT部分的末尾,然后实际命名表格

SELECT *, student.id, student.name, attendance.date
FROM student
  LEFT JOIN attendance
    ON student.id = attendance.student_id
WHERE attendance.date = '2015-10-15'