Соединения MySQL: отображение всех строк в таблице с использованием предложения where - PullRequest
1 голос
/ 05 марта 2012

У меня есть следующие таблицы:

slots = идентификатор, время

child = id, parent_id, имя, форма

parent = id, name, contact_details

teacher = идентификатор, имя, тема

appointments = id, child_id, slot

Я использую следующий код для отображения списка бронируемых встреч:

SELECT s.id, DATE_FORMAT( s.time,  '%l:%i' ) AS TIME, p.name
FROM slots AS s
LEFT JOIN appointments AS a ON a.slot = s.id
LEFT JOIN child AS c ON a.child_id = c.id
LEFT JOIN parent AS p ON c.parent_id = p.id

Здесь отображается список всех моих слотов для встреч и несколько с именами родителей.

Что бы я хотел сделать, для конкретного учителя , отобразить список всех мест для встреч, и если некоторые из них были заполнены, я бы хотел показать имя родитель ребенка, который забронировал этот слот .

Например,

Назначения мисс Брумфилд:

id  TIME    name
1   4:00    Parent One
2   4:05    NULL
3   4:10    Parent Two
4   4:15    NULL
5   4:20    NULL
6   4:25    NULL
7   4:30    NULL

Возможно ли это? Я попытался использовать предложение WHERE, но в нем просто отображаются забронированные встречи, а не полный список доступных раз.

Таким образом, я понял, что я совершенно уверен, что мои СОЕДИНЕНИЯ совершенно неверны!


ОБНОВЛЕНИЕ: таблица слотов выглядит следующим образом:

SQL result

Host: localhost
Generation Time: Mar 05, 2012 at 11:43 AM
Generated by: phpMyAdmin 3.4.9 / MySQL 5.5.20
SQL query: SELECT * FROM `slots` LIMIT 0, 30 ; 
Rows: 30

id  time
1   2012-03-15 16:00:00
2   2012-03-15 16:05:00
3   2012-03-15 16:10:00
4   2012-03-15 16:15:00
5   2012-03-15 16:20:00
6   2012-03-15 16:25:00
7   2012-03-15 16:30:00
8   2012-03-15 16:35:00
9   2012-03-15 16:40:00
10  2012-03-15 16:45:00
11  2012-03-15 16:50:00
12  2012-03-15 16:55:00
13  2012-03-15 17:00:00
14  2012-03-15 17:05:00
15  2012-03-15 17:10:00
16  2012-03-15 17:15:00
17  2012-03-15 17:20:00
18  2012-03-15 17:25:00
19  2012-03-15 17:50:00
20  2012-03-15 17:55:00

Заранее спасибо,

Ответы [ 2 ]

1 голос
/ 05 марта 2012

ИЛИ вы можете поместить следующее в ГДЕ

WHERE appointments.teacher_id =$teacher OR appointments.teacher_id IS NULL

1 голос
/ 05 марта 2012

Ответ от друга в IRC, кажется, добился цели:

SELECT s.id, DATE_FORMAT( s.time,  '%l:%i' ) AS time, p.name
FROM slots AS s
LEFT JOIN appointments AS a ON a.slot = s.id
AND teacher_id =$teacher
LEFT JOIN child AS c ON a.child_id = c.id
LEFT JOIN parent AS p ON c.parent_id = p.id

Важной является строка И !

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...