私は3つのテーブルを持っておりcountry_data, user_data
、topic_data
与えられたテーブル構造を持っています。
国データ:
name | code
---------------|---------------
India | IN
United States | US
Australia | AU
ユーザーデータ:
user_ip | topic_code | country
---------------|---------------|---------------
192.168.1.1 | topic_code_1 | India
192.168.1.2 | topic_code_2 | United States
192.168.1.3 | topic_code_3 | Australia
トピックデータ:
name | code
---------------|---------------
topic_1 | topic_code_1
topic_2 | topic_code_2
topic_3 | topic_code_3
テーブルには約10万行ありuser_data
ます。
私が望むのは、特定のトピックに対応する国コードを使用して、各国のユーザー数をフィルタリングする必要があるということです。たとえば、topic_2
各国で閲覧したユーザーの数が必要です。要求される出力形式は次のとおりです。
country_code | count
---------------|---------------
IN | 150
US | 120
AU | 100
今私のクエリをチェックしてください:
SELECT cd.code, COUNT(ud.country) as count
FROM topic_data as td, user_data as ud, country_data as cd
WHERE td.name = 'topic_1' AND td.code = ud.topic_code AND ud.country = cd.name
GROUP BY ud.country
これは phpmyadmin で実行を完了するのに約 2 秒かかります。php の Web ページでは、サーバーでもページの読み込みに 15 秒かかります。クエリで group by を削除します。つまりGROUP BY ud.country
、実行に 30 秒以上かかり、最後の国コードとすべての国への訪問の合計が出力されます。私は何を間違っていますか?助けてください。
- - アップデート - -
外部キーを使用してテーブルを変更し、クエリも変更しました。今では電光石火の速さで動作します。助けてくれた人に感謝します。