2016-06-25 10 views
1

私は2つのテーブルゲームとベットを持っています。私は各ゲームのベット数を数えたいと思う。しかし、私の現在の質問には、その特定のゲームIDの賭けがない場合、ゲームは含まれません。ここ行が存在しない場合にカウント値0を表示MYSQL

は私の現在のクエリです:

SELECT g.*, 
     Count(*) AS participants 
FROM game g, 
     bet b 
WHERE b.game_id = g.id 
     AND USER = ? 
GROUP BY g.id 

だから私は私のゲームのテーブルに3行を持って言うことができますそれをより明確にします。 game1には4ベット、game2には2ベット、bet3テーブルにはgame3に関連付けられた行はありません。結果は次のようになります。

g1 4 
g2 2 
g3 0 

私は助けてくれたでしょう。

+0

あなたは –

答えて

1

左結合を使用して、ベットテーブルに存在する列をカウントします。ベットテーブルへの参加に失敗したゲームレコードについては、グループ化された結果セット内に1つの行が返され、これは賭けテーブルのすべての列にNULLを持ちます。 count()集計関数はNULL値をカウントしないため、結合に失敗したゲームレコードではゼロが返されます。

select g.*, count(b.game_id) participants 
from game g left join bet b on b.game_id=g.id 
where user=? 
group by g.id 
+2

の'外Join'が必要これはうまくいった!だから私は通常の参加の代わりにやらなければならなかったことがすべて参加に残った! –

+0

..私はMySQLがあなたがそうすることを可能にするもののthem..evenの一つだけで、すべての列とグループを選択するための悪い習慣だと思います代わりに 'インナーjoin' –

+0

@vkpはい私はちょっと質問を短くしたいと思っていました。覚えてくれてありがとう –

0

SELECTグラム。*、b.count(game_id)ゲームグラムの左からの参加者がb.game_id = g.idとユーザーのベットbが参加して=? group by g.id;

Example 

mysql> SELECT * FROM calls; 
+----+------------+---------+ 
| id | date  | user_id | 
+----+------------+---------+ 
| 1 | 2016-06-22 |  1 | 
| 2 | 2016-06-22 | NULL | 
| 3 | 2016-06-22 | NULL | 
| 4 | 2016-06-23 |  2 | 
| 5 | 2016-06-23 |  1 | 
| 6 | 2016-06-23 |  1 | 
| 7 | 2016-06-23 | NULL | 
+----+------------+---------+ 
7 rows in set (0.00 sec) 

mysql> SELECT * FROM payments; 
+----+------------+---------+-------+ 
| id | date  | user_id | value | 
+----+------------+---------+-------+ 
| 1 | 2016-06-22 |  1 | 10 | 
| 2 | 2016-06-22 |  3 | 15 | 
| 3 | 2016-06-22 |  4 | 20 | 
| 4 | 2016-06-23 |  2 | 100 | 
| 5 | 2016-06-23 |  1 | 150 | 
+----+------------+---------+-------+ 
5 rows in set (0.00 sec) 

mysql> SELECT c.*,count(p.user_id) FROM calls c LEFT JOIN payments p ON p.user_id=c.user_id GROUP BY c.user_id; 
+----+------------+---------+------------------+ 
| id | date  | user_id | count(p.user_id) | 
+----+------------+---------+------------------+ 
| 2 | 2016-06-22 | NULL |    0 | 
| 1 | 2016-06-22 |  1 |    6 | 
| 4 | 2016-06-23 |  2 |    1 | 
+----+------------+---------+------------------+ 
3 rows in set (0.00 sec) 
関連する問題