Php MySql查询2条记录作为1个结果
我有一个表地址和一个表路线 路由存储两个地址ID和这些位置之间的距离->Php MySql查询2条记录作为1个结果,php,mysql,subquery,Php,Mysql,Subquery,我有一个表地址和一个表路线 路由存储两个地址ID和这些位置之间的距离->idStart,idEnd,distance +-------+-------+-----+--------+ |idRoute|idStart|idEnd|distance| +-------+-------+-----+--------+ |0 |1 |3 |2698 | |1 |2 |4 |914 | +-------+-------|-----+---
idStart
,idEnd
,distance
+-------+-------+-----+--------+
|idRoute|idStart|idEnd|distance|
+-------+-------+-----+--------+
|0 |1 |3 |2698 |
|1 |2 |4 |914 |
+-------+-------|-----+--------+
+---------+---------+-------------+
|idAddress|country |city |
+---------+---------+-------------+
|0 |USA |Indianapolis |
|1 |Brasil |Rio |
|2 |Germany |Munich |
|3 |Argentina|Buenos Aires |
|4 |Italy |Rome |
+---------+---------+-------------+
`
因此,我想查询并获取所有路线,如下所示:
+-------+-------+-------+--------+---------+------+------------+--------+
|idRoute|idStart|idEnd |CountryS|CountryE |CityS |CityE |distance|
+-------+-------+-------+--------+---------+------+------------+--------+
|0 |1 |3 |Brasil |Argentina|Rio |Buenos Aires|2698 |
|1 |2 |4 |Germany |Italy |Munich|Rome |914 |
+-------+-------+-------+--------+---------+------+------------+--------+
如果我做一些子查询和outerquery一个特定的路由id,它会工作,因为我有一个特定的where id=#
但在大多数情况下,我需要路由的所有记录,我无法让它工作,因为对于子查询,我会错过where语句
类似于外部查询->“
将fieldname设置为outerResult
”并在内部查询的where语句中使用outerResult???您只需从路由表连接到地址两次:一次用于IDstart,一次用于IdEnd。这是通过使用表别名来实现的,这样您可以两次引用地址表,并且在连接或引用字段时,数据库引擎知道使用/需要哪个表引用
SELECT r.IdRoute
, r.idstart
, r.idend
, Start_Add.country as CountryS
, End_Add.country CountryE
, Start_Add.city as CityS
, End_Add.city as CityE
, r.distancce
FROM route r
INNER JOIN Address Start_Add
on r.IDStart= Start_Add.IdAddress
INNER JOIN address End_Add
on r.IDEnd= End_Add.IdAddress
i使用
idAddress
与idStart
和idEnd
匹配在您编写的问题中,您有2个表,但查询有3个:其中也列出了一个国家/地区表。无论如何,这是一个重复的问题,因为您只需要加入地址表两次。也许国家表也会翻一番。这里有个主意。如果您存储坐标,那么您将自动获得每对城市之间的距离!
SELECT r.IdRoute
, r.idstart
, r.idend
, Start_Add.country as CountryS
, End_Add.country CountryE
, Start_Add.city as CityS
, End_Add.city as CityE
, r.distancce
FROM route r
INNER JOIN Address Start_Add
on r.IDStart= Start_Add.IdAddress
INNER JOIN address End_Add
on r.IDEnd= End_Add.IdAddress