こんにちは、ここに次の 3 つのテーブルがあります。
COUNTRIES
ID | Name | Details
Airports
ID | NAME | CountryID
Trips
ID | AirportID | Date
以下を示すリストを取得する必要があります。
AirportID | AIrport Name | Country Name | Number of Trips Made Between Date1 and Date2
これを本当に効率的にする必要があります。どのような種類のインデックスを設定する必要があり、ここで SQL クエリをどのように作成すればよいでしょうか? これを Php を使用して表示します。行った旅行の数に基づいて並べ替えることができる必要があることに注意してください。
編集==
おっと、私のSQLに言及するのを忘れていました:
私は次のことを試しました:
SELECT `c`.*, `t`.`country` AS `country_name`, COUNT(f.`id`) AS `num_trips` FROM `airports` AS `c`
LEFT JOIN `countries` AS `t` ON t.`id` = c.`country_id`
LEFT JOIN `trips` AS `f` ON f.`airportid` = c.`id` GROUP BY `c`.`id` ORDER BY `num_flights` ASC LIMIT 10
それは機能しますが、実行には非常に長い時間がかかります-さらに、私の空港テーブルには30,000を超えるエントリがあり、旅行テーブルは可変であることを考慮してください。
国テーブルから国の名前を取得しているだけです-代わりにSQLで国テーブルへの参加を除外し、代わりにインデックスがIDで値が配列から国名を取得する方が良いでしょうか国の名前?