MySQL LEFT JOIN表或PHP组合数组

我被困住了,希望得到您的帮助(建议)。我正在使用PHP和MysQL,下面将介绍我的问题。

这是我要实现的简化版本。我有两个表,一个是城市列表,另一个是出发时间。我想左联接这两个表(如果可能的话),并返回所有城市的列表,即使表bus_departures中没有连接的记录也是如此。

我可以仅使用MySQL来做到这一点,还是必须在PHP中组合数组。我希望看到您的解决方案。谢谢你。

城市

-------------------     
ID | CITY               
-------------------     
1   | London            
2   | Paris             
3   | New York          
4   | Rome              
5   | Zagreb            

巴士出发

------------------------------------------
ID  | DATE          | CITY          | No. DEPARTURES
------------------------------------------
1   | 2016-06-06    | 1             | 5
2   | 2016-06-06    | 4             | 3
3   | 2016-06-06    | 3             | 2
4   | 2016-06-07    | 3             | 4
5   | 2016-06-07    | 1             | 1
6   | 2016-06-08    | 3             | 8
7   | 2016-06-09    | 1             | 3
8   | 2016-06-09    | 4             | 2

选择

SELECT * FROM City LEFT JOIN Bus_Departures WHERE date = '2016-06-07' ORDER BY City ASC

退货

London      2016-06-07      1
New York    2016-06-07      4

我会喜欢这个给用户

London      2016-06-07      1
New York    2016-06-07      4
Paris       2016-06-07      - (no records at all)
Rome        2016-06-07      - (no records for this day)
Zagreb      2016-06-07      - (no records at all)

谢谢!

选择9

您当然需要LEFT JOIN为用例做一个准备,但是在您当前的语句中,您的WHERE语句将在已经连接的表上运行。因此,在使用该WHERE子句之前,已连接的表将如下所示:

London            | 2016-06-06  | 5
Rome              | 2016-06-06  | 3
New York          | 2016-06-06  | 2
New York          | 2016-06-07  | 4
London            | 2016-06-07  | 1
New York          | 2016-06-08  | 8
London            | 2016-06-09  | 3
Rome              | 2016-06-09  | 2
Paris             | NULL        | NULL
Zagreb            | NULL        | NULL

现在很明显,aWHERE date = '2016-06-07'不会返回您想要的数据。

但是,如果您在联接子句中包括日期要求,它将起作用,例如:

SELECT * FROM City LEFT JOIN Bus_Departures
  ON (City.ID = Bus_Departure.CITY AND Bus_Departure.date = '2016-06-07')
  ORDER BY City ASC

在这种情况下,LEFT JOIN只需在右侧执行以下操作即可:

------------------------------------------
ID  | DATE          | CITY          | DEPARTURES
------------------------------------------
4   | 2016-06-07    | 3             | 4
5   | 2016-06-07    | 1             | 1

(它还将运行得更快。)

由于您还希望日期包含在结果中,因此完整的语句应如下所示:

SELECT City.CITY, '2016-06-07', Bus_Departure.DEPARTURES 
  FROM City LEFT JOIN Bus_Departures
  ON (City.ID = Bus_Departure.CITY AND Bus_Departure.date = '2016-06-07')
  ORDER BY City.ID ASC

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

MySQL与Left Join相反

来自分类Dev

MySQL LEFT JOIN 与 OR 条件

来自分类Dev

MySQL从多个表与LEFT JOIN多个

来自分类Dev

Mysql Left join避免重复表

来自分类Dev

MySQL LEFT JOIN无法使用多个表

来自分类Dev

如何从LEFT JOIN MySQL表调用结果

来自分类Dev

用LEFT JOIN更新pdo php mysql

来自分类Dev

MySQL "Left Outer Join" Issue

来自分类Dev

带有IF的MySQL LEFT JOIN

来自分类Dev

MySQL的:添加其中,在LEFT JOIN

来自分类Dev

MySQL 5.1.73 LEFT JOIN超时

来自分类Dev

MySQL可选的LEFT JOIN与MATCH

来自分类Dev

MySQL UNION ALL与LEFT JOIN

来自分类Dev

MYSQL LEFT JOIN选择增强

来自分类Dev

MYSQL中的LEFT JOIN问题

来自分类Dev

MySQL LEFT JOIN的WHERE子句

来自分类Dev

MySQL LEFT JOIN错误#1064

来自分类Dev

Mysql的INNER JOIN后LEFT OUTER JOIN

来自分类Dev

mySQL LEFT JOIN和COUNT表中出现的次数

来自分类Dev

表的GROUP BY在使用LEFT JOIN的MySQL中返回错误计数

来自分类Dev

mysql LEFT JOIN与其他表的条件

来自分类Dev

MySQL LEFT JOIN Count列连接3个表

来自分类Dev

使用LEFT JOIN和History表的MySQL查询的正确结果

来自分类Dev

Mysql Left Join按月销售表,空月

来自分类Dev

LEFT JOIN表mysql,无法正确获取数据

来自分类Dev

同一表中LEFT JOIN的速度-MySQL

来自分类Dev

如何使用 LEFT JOIN 连接多个 mySQL 表?

来自分类Dev

MySQL查询Select,SUM,LEFT JOIN

来自分类Dev

MYSQL LEFT JOIN和COUNT和GROUP BY