2015-10-23 7 views
0

У меня есть таблица «ученика» и таблица «посещаемости» Если ученик отсутствует, я просто вводим идентификатор и дату ученика в таблице посещаемости. Теперь я хочу, чтобы получить все студенты и их присутствие на определенную дату Однако, когда я пытаюсь левой Join, это дает мне данные конкретного студента отсутствует на этой конкретной датыleft join not working in php

Таблица «студент» структура и выборка данных:

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) 
+0

Пожалуйста, помогите нам помочь вам, предоставляя http://sqlfiddle.com/ – Ross

+0

Всякий раз, когда вы используете, где положение в запросе он вернет только данные, которые удовлетворяют условию, поэтому вам нужно использовать это условие в 'ON' вместо' WHERE' – Vinie

ответ

1

Для вывода вы желаете вам необходимо переместить ваше состояние 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' 

В этом случае дата будет использоваться во время соединения. Если вы используете его в WHERE пункте, фильтрация выполняется после того, как присоединился к данным, так что вторая линия от нужного выхода отфильтровывается

Вот SQL Fiddle демонстрирует решение

+0

Perfect. Большое спасибо. – Ash

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' 
+0

Кроме того, вы должны пересмотреть инструкцию SELECT. Вы выбираете '*', что может вызвать неоднозначную ошибку ошибки, но также выбирать определенные элементы из каждой таблицы. – Chris