【问题标题】:MySQL joins: displaying all rows in a table whilst using "where" clauseMySQL 连接:在使用“where”子句时显示表中的所有行
【发布时间】:2012-03-05 19:54:07
【问题描述】:

我有以下表格:

slots = id,时间

child = id, parent_id, name, form

parent = id, name, contact_details

teacher = id、姓名、主题

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 子句,但它只是显示已预订的约会,而不是可用时间的完整列表。

因此我意识到我相当确定我的 JOIN 完全错误!


更新:槽表如下所示:

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

提前致谢,

【问题讨论】:

  • 你能显示你尝试过的查询吗?看起来它应该可以工作 - “约会”表中有什么?另外,您在约会、孩子和父母之间使用外部联接是否有原因?

标签: mysql join


【解决方案1】:

或者您可以将以下内容放在 WHERE 中

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

【讨论】:

    【解决方案2】:

    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
    

    AND 行很重要!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-06
      • 1970-01-01
      • 2018-11-30
      • 1970-01-01
      相关资源
      最近更新 更多