私はテーブルアドレスとテーブルルートを持っています。MySqlクエリ2レコードを1つの結果として返します
ルートストアの2つの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 |
+-------+-------+-------+--------+---------+------+------------+--------+
私はいくつかのサブクエリを行うと、特定のルートIDをouterquery場合、それは私ので、うまくいきます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
"のようなものと、内部クエリのステートメントのouterResultを使用するもの
iguess 'idAdress'は' idStart'、あなたが2つのテーブルを持って書きましたが、クエリは3を持っている問題で、 'idEnd' – RealCheeseLord
と一致します。 – Shadow
これは重複した質問です。なぜなら、アドレステーブルを2度追加する必要があるからです。おそらく国のテーブルも2倍です。 – Shadow