PHP MYSQL查询,查找连接

PHP MYSQL查询,查找连接,php,mysql,Php,Mysql,为了进行实验,我正在构建一个脚本,该脚本旨在使用PHP和mysql查找航班连接 我有一个名为“时间表”的数据库,类似于以下内容: dep_airport, arr_airport, flt_num LHR JFK 100, LHR FRA 200, JFK MIA 300 假设有人想从LHR飞到MIA。他们需要在JFK中转,所以乘坐100次LHR-JFK航班,然后转乘300次JFK-MIA航班 如果我运行查询: SELECT * FROM schedules WHERE dep_airpor

为了进行实验,我正在构建一个脚本,该脚本旨在使用PHP和mysql查找航班连接

我有一个名为“时间表”的数据库,类似于以下内容:

dep_airport, arr_airport, flt_num

LHR JFK 100,
LHR FRA 200,
JFK MIA 300
假设有人想从LHR飞到MIA。他们需要在JFK中转,所以乘坐100次LHR-JFK航班,然后转乘300次JFK-MIA航班

如果我运行查询:

SELECT * FROM schedules WHERE dep_airport = 'LHR' AND arr_airport = 'MIA'

查询将返回null,因为没有直接连接。我如何查询数据库以找到LHR-MIA确实存在但通过JFK的关系?

要真正使其工作,您需要更多信息,例如到达和离开时间

如果您将选择限制为一站(最多两个航班),那么一个简单的SQL连接将找到您的航班

SELECT *
FROM `schedules` a
JOIN `schedules` b
ON a.`arr_airport` = b.`dep_airport`
WHERE a.`dep_airport` = 'LHR' AND b.`arr_airport` = 'MIA'
当然,在运行此查询之前,您会检查是否有直飞航班。此外,您还需要对到达和离开时间进行限制。实时调度软件甚至考虑了从一个登机口到另一个登机口的时间,因此它不仅仅像到达时间<出发时间那样简单

如果您还需要考虑更多的停止,您将添加更多的连接,以便在这个查询之后运行。p>


也可以编写一个查询,一次查找非停止和一次查找所有停止,但出于性能原因,您可能希望避免这种情况。

鉴于您当前的架构以及您在注释中澄清问题的方式,您可以通过在相关表上使用左连接来获取信息:

SELECT s1.* 
FROM schedules s1 
LEFT OUTER JOIN schedules s2
ON s1.arr = s2.dep
WHERE s1.dep = 'LHR'
AND s2.arr = 'MIA'
如图所示,它返回:

dep arr flight
LHR JFK 100

添加以显示这在最基本的级别上是如何工作的。再一次,评论中询问了许多未解释的变量,但如果您所追求的只是三个原始列的问题,那么这可能就是您想要的方式。

您需要更多信息,因为这里没有足够的信息来建立一个…..等待…..连接。您是巴尼吗?@JayBlanchard如“中转航班”?;-)@杰布兰查德你能给我指一下正确的方向吗?什么样的附加信息?谢谢你必须知道航班号是如何改变的,或者从一个航班到另一个航班是如何连接的。仅仅拥有机场标识符是不够的。什么构成了这种联系?谢谢你的建议。谢谢。我想试试这个。我还在学习。我现在已经简化了数据库,一旦我能够工作,我将尝试更复杂的事情:)。