クエリをまとめて結合することもできますが、都市、地区、またはサブ地区であるかどうかを知るには、結果に何かが必要です。私は明らかにそれをテストすることはできませんでしたが、次のような何かが動作するかもしれません。
(
SELECT
city AS city,
NULL AS district,
NULL AS subdistrict,
rate AS rate
FROM postages
WHERE city=$city
) UNION (
SELECT
NULL,
district,
NULL,
rate
FROM postages
WHERE city=$city
AND district=$district
) UNION (
SELECT
NULL,
NULL,
subdistrict,
rate
FROM postages
WHERE city=$city
AND district=$district
AND subdistrict=$subdistrict
)
結果セットには、市がnullではない少なくとも1つの行、地区がnullでなく、subdistrictがnullではありません、あなたは、有効な結果セットを得ている1 1が含まれている場合。
SELECT IFNULL(c.rate, IFNULL(d.rate, s.rate)) as rate FROM (
(SELECT rate, count(*) FROM postages where city = '$city') as c,
(SELECT rate, count(*) FROM postages where district = '$district') as d,
(SELECT rate, count(*) FROM postages where subdistrict = '$subdistrict') as s
)
あなたはそれを別の方法...のみ地区のクエリを実行しませんも可能性がある場所ならば:あなたはあなたができるあなたの例を持っているとまったく同じ結果を取得したい場合は
クエリは上記の条件に従うと思われますか?都市に利用可能な料金がない場合は、地下鉄の料金などを取得しますか? – Josh
@ジョシュ:そうですね。 –
各クエリは1つの行のみを返すと予想されますか?たとえば、同じ都市と異なるサブディストリビューションを持つ複数の行がありますか? –