2017-02-21 14 views
1

これは誰かのための簡単な質問です。 私は特定のregionIDに属するユーザーの数を取得しようとしています。MYSQL - 2つのテーブルからの行の数を取得する

私はusersテーブルとvenuesテーブルを持っており、特定のregionIDのユーザー領域と会場領域を一致させたいと思います。

など様々な試みからの私の結果は、数百万人になり

SELECT COUNT(*) FROM users 
LEFT JOIN venues 
ON users.region = venues.region 
WHERE venues.regionID = '18' 

、1に応答しないページ(一口)

例テーブルのデータへ:

ユーザー

userID = 1 
region = 'Brisbane' 

ve nues

venueID = 1 
region = 'Brisbane' 
regionID = '18'// which equates to Queensland 

おかげで

+3

 ALTER TABLE users ADD INDEX region_userID (region, usersID) 

また、あなたの他のテーブルの上に、これを読んで、これらの2

 ALTER TABLE venues ADD INDEX regionID_region (regionID, region) ALTER TABLE venues ADD INDEX region_regionID (region, regionID) 

を試してみてください元のデータセットの最終的な復帰結果となります。今のところ、あなたが達成しようとしていることはあまり明確ではありません。 – Santi

+0

これで、表示されたクエリは機能しますか?何が出力されますか?なぜあなたはLEFT JOINを使っていますか? 'users.region'は' users.region'と一致しますか? –

+0

hmmm質問は「特定の地域IDに属するユーザーの数」という質問が残っていると思いますが、残念です。 – niceman

答えて

1

私はあなたのregionId基準に合致明確なユーザーのカウントをしたい(知らずに)推測します。

これは可能です。

SELECT COUNT(*) 
    FROM users 
WHERE region IN (SELECT region FROM venues WHERE regionID = '18') 

または、このように各地域の別個のユーザー数を取得できます。

SELECT COUNT(DISTINCT users.userID) users, 
     region.regionID 
    FROM users 
    JOIN venues ON users.region = venues.region 
GROUP BY region.regionID 

私はあなたのusersテーブル内userID列を持っていると思います。

COUNT(*)おそらく結合操作の結果にusersテーブル自体とは異なる行数が含まれているため、JOINでは機能しません。

これは、たくさんのSQLを知り、必要な結果を指定するのに役立つ操作の1つです。幸いなことに、DISTINCTキーワードを使用すると、大きなカウントを小さくして意味のあるカウントに減らすことができます。

パフォーマンスを助けるために、(region, usersID)列のusersテーブルに複合インデックスを追加する必要があります。このDDLクエリはあなたのためにそれを行うかもしれません。あなたがもう少し明確にあなたの目標を記述する必要がある、または私たちの作品を紹介しますどちらかhttp://use-the-index-luke/

+0

助けてくれてありがとう。はい、usersテーブルにusersIDがあります。 yeah - 地域ID基準に一致する別のユーザーの数です。そのとおり。カウントを表示するために必要な各地域IDに対して、これらのselectステートメントの1つを使用します。 ユーザーテーブルは120,000行、会場は3,000です。コードの最初のスニペットを試してみると、そのページがタイムアウトしているようです。 他のコードスニペットも試してみます。 ありがとう – Dmeter

関連する問題