php - MYSQL AND 查询满足同一列

标签 php mysql sql

项目目标:

我们正在开发公交车计时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

表格说明:在这里,我将分配路线站点的巴士以及时间、行程和方向

输出预期:

  1. 当用户在源到目的地之间搜索带时间的巴士时,Api 必须返回带时间的所有巴士列表

  2. 如果没有直达巴士,则应显示互连巴士

例如,如果用户在 stop_8 之间搜索至stop_1801:00:0012:00:00那么应该显示所有带有时间的巴士列表。如果没有直达巴士在两个站点之间行驶,那么应该显示互连链接巴士列表

输出我得到的是

PHP compare associative array based on condition

目前返回结果问题是

  1. 即使巴士仅前往stop_8,它也会返回所有巴士。但不是stop_18 。但我的结果必须只返回那些将在两个站点之间行驶的公共(public)汽车,我的意思是它必须落在两个站点之间。

  2. 即使我不知道如何找到互连的公交车列表

  3. 当时间范围较长时,同一辆巴士有可能会多次行驶(行程和方向)

更新 仍在寻找答案。现在给出的答案有一些积分,因此提供赏金

最佳答案

因为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/

相关文章:

php - 领英连接API

mysql - CSV加载数据不导入文件

Mysql创建1个表用于多个表

Mysql 动态变量针对列名

mysql - 如果两个条件在子记录的不同行上匹配,则高级 Mysql 查询获取主记录

php - 如何在 SQL 中插入保留字为 "from"的记录?

php - 为每个用户生成随机唯一代码

javascript - 下载特定文件夹中的文件

php - 截断表中除第一个列之外的所有 MySQL 列

sql - CASE THEN 子句始终求值