项目目标:
我们正在开发公交车计时Api
用户将在其中搜索公交车。
以下是我的table structure
我有以下tables
公交车
id | bus_name
表说明:存储所有总线名称
路线
id | route_name
表说明:存储所有城市名称
停止
id | stop_name
表格说明:所有车站名称
止损订单
id | route_id | stop_id | stop_order
表说明:在这里,我将为城市分配停靠点,stop_order 列有助于识别相邻的停靠点
总线计时
id | stop_order_id | bus_id | bus_timing | trip | trip_direction
表格说明:在这里,我将分配路线站点的巴士以及时间、行程和方向
输出预期:
当用户在源到目的地之间搜索带时间的巴士时,Api 必须返回带时间的所有巴士列表
如果没有直达巴士,则应显示互连巴士
例如,如果用户在 stop_8
之间搜索至stop_18
与 01:00:00
至12:00:00
那么应该显示所有带有时间的巴士列表。如果没有直达巴士在两个站点之间行驶,那么应该显示互连链接巴士列表
输出我得到的是
PHP compare associative array based on condition
目前返回结果问题是
即使巴士仅前往
stop_8
,它也会返回所有巴士。但不是stop_18
。但我的结果必须只返回那些将在两个站点之间行驶的公共(public)汽车,我的意思是它必须落在两个站点之间。即使我不知道如何找到互连的公交车列表
当时间范围较长时,同一辆巴士有可能会多次行驶(行程和方向)
更新 仍在寻找答案。现在给出的答案有一些积分,因此提供赏金
最佳答案
因为stop_id
不能是同一行中的两个不同值。
聚合是实现您想要的功能的一种方法:
SELECT b.bus_name
FROM buses b JOIN
route_connect rc
ON rc.busid = b.id JOIN
stops s
ON s.id = rc.stop_id
GROUP BY b.bus_name
HAVING SUM( s.stop_name = 'Sydney' ) > 0 AND
SUM( s.stop_name = 'Melbourne' ) > 0;
这将返回具有两个城市名称的站点的公交车。
考虑到公交车可能有很多站点,这样做可能会更有效:
SELECT b.bus_name
FROM buses b JOIN
route_connect rc
ON rc.busid = b.id JOIN
stops s
ON s.id = rc.stop_id
WHERE s.stop_name in ('Sydney', 'Melbourne')
GROUP BY b.bus_name
HAVING COUNT(DISTINCT s.stop_name) = 2;
关于php - MYSQL AND 查询满足同一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48158380/