Php MySql查询2条记录作为1个结果

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 | +-------+-------|-----+---

我有一个表地址和一个表路线

路由存储两个地址ID和这些位置之间的距离->
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