ウェブサイト(旅行代理店)の場合、パフォーマンスの向上に取り組んでいます。現在、検索モジュールを最適化しています。とりわけ、目的地を保持する選択ボックスを最適化したいと思います。システムにはいくつかの目的地がありますが、すべての目的地に予約可能な宿泊施設があるわけではありません。ですから、少なくとも1つの宿泊施設がある目的地のリストが欲しいのです。宛先テーブル(テーブル名:geodata)には、国、地域、地域、都市の4つのタイプがあります。(一種の*)不適切な開発のため、収容テーブルは4つの外部キー(fk_country、fk_area、fk_region、およびfk_city)を保持します。*機能が開発されるたびに、成長と今後の要件のため。
IFステートメントに基づいて左結合を使用して次のことを試しました。しかし、このクエリは半分の作業しか実行しません。特定の国、地域、地域、または都市ごとの宿泊施設の数に最も関心があります。現時点では、宿泊施設の総数しかわかりません。このクエリを微調整して、特定の場所のタイプごとに宿泊施設の数を正しく取得する方法。
私の質問:
SELECT geodata.id,
geodata.type,
COUNT(accommodation.id) AS count_accommodations
FROM geodata
LEFT JOIN accommodation
ON IF(geodata.type = 'Country', accommodation.fk_country,
IF(geodata.type = 'Area', accommodation.fk_area,
IF(geodata.type = 'Region', accommodation.fk_region, accommodation.fk_city)
)
)
GROUP BY geodata.id
HAVING count_accommodations > 0
現在の出力:
|id|type |count_accommodations|
---------------------------------
| 1|Country| 2|
| 2|Area | 2|
| 3|Area | 2|
期待される出力
|id|type |count_accommodations|
---------------------------------
| 1|Country| 2|
| 2|Area | 1|
| 3|Area | 1|
どんな助けでも大歓迎です。