【发布时间】:2018-01-18 18:16:28
【问题描述】:
我有一个表 address 和一个表 route。
Route 存储了 Address 的 2 个 id 以及这些 Locations 之间的距离 -> 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 |
+-------+-------+-------+--------+---------+------+------------+--------+
如果我做一些子查询和外部查询一个特定的路由 id,它会起作用,因为我有一个特定的 where id=#
SELECT
ro.idRoute,
ro.idStart,
ro.idEnd,
ro.distance,
ro.time,
(select a.country from address a
left join route ro
on (a.idAddress=ro.idStart)
WHERE ro.idRoute='.$id .') as country_start,
(select a.country from address a
left join route ro
on (a.idAddress=ro.idEnd)
WHERE ro.idRoute='.$id .') as country_end, FROM route ro
LEFT JOIN address a ON (a.idAddress=ro.idStart)
LEFT JOIN countries c ON (a.country=c.code)
WHERE ro.idRoute='.$id . $this -> presetFilter . ';
但在大多数情况下,我需要所有路线记录,但我无法让它工作,因为对于子查询,我会错过 where 语句。
类似于外部查询->“set fieldname as outerResult”并在内部查询的where语句中使用outerResult????
【问题讨论】:
-
iguess
idAdress与idStart和idEnd匹配 -
在您写的问题中,您有 2 个表,但查询有 3 个:那里还列出了一个国家/地区表。
-
无论如何,这是一个重复的问题,因为您只需要加入地址表两次。也许国家/地区的表格也是两倍。
-
这是一个想法。如果您改为存储坐标,那么您将自动获得每对城市之间的距离!