2012-04-06 5 views
1

私は、キュー内の召喚者が今日果たしたゲームの数を取得しようとしています。私はいくつかのクエリを試してみました。私が得た最も近いものは次のとおりです:今日は特定のユーザーがデータを持っていないゲームの数

SELECT 
     s.summoner, 
     s.wins, 
     COUNT(*) as playedToday 
    FROM summoners s 
    LEFT JOIN teams_players tp ON tp.summoner_id = s.summoner 
    LEFT JOIN teams t ON t.id = tp.team_id 
    LEFT JOIN matches b ON t.id = b.blue_id 
    WHERE 
     b.played_on = DATE(NOW()) 
     s.in_queue; 

しかし、それはユーザーごとのカウントを与えません。それは単に全体のカウントを取得します。

いずれのテーブルも、どの召喚者のデータも持っていません。私は解決策を見つけていない理由である、一般的にこの問題を表現する方法を考えることができない

+-----------------+------+-------------+ 
    | summoner  | wins | gamesPlayed | 
    +-----------------+------+-------------+ 
    | DotAliscious | 353 |   0 | 
    | Kraator   | 440 |   0 | 
    | Nammon   | 667 |   0 | 
    | VictorousSecret | 843 |   0 | 
    | Canas   | 544 |   0 | 
    | Sprognak  | 502 |   0 | 
    | Ghostilocks  | 808 |   0 | 
    | b0b d0e   | 224 |   0 | 
    | Metroshica  | 339 |   0 | 
    | RubenatorX  | 478 |   0 | 
    +-----------------+------+-------------+ 

:私が好きなことのようなものです。


マイデータセット。 teams.idmatches.blue_idmatches.purple_idと一致します。

mysql> DESCRIBE summoners; 
+--------------+-------------+------+-----+---------+----------------+ 
| Field  | Type  | Null | Key | Default | Extra   | 
+--------------+-------------+------+-----+---------+----------------+ 
| id   | int(11)  | NO | PRI | NULL | auto_increment | 
| icon   | int(11)  | NO |  | 0  |    | 
| summoner  | varchar(32) | NO | UNI | NULL |    | 
| skype  | varchar(32) | NO |  | NULL |    | 
| email  | varchar(32) | NO |  | NULL |    | 
| in_queue  | tinyint(1) | NO |  | 0  |    | 
| wins   | int(11)  | NO |  | 0  |    | 
| level  | int(11)  | NO |  | 1  |    | 
| lan_wins  | int(11)  | NO |  | 0  |    | 
| played_today | int(11)  | NO |  | 0  |    | 
+--------------+-------------+------+-----+---------+----------------+ 
10 rows in set (0.00 sec) 

mysql> DESCRIBE matches; 
+-----------+-------------+------+-----+---------------------+----------------+ 
| Field  | Type  | Null | Key | Default    | Extra   | 
+-----------+-------------+------+-----+---------------------+----------------+ 
| id  | int(11)  | NO | PRI | NULL    | auto_increment | 
| blue_id | int(11)  | NO | MUL | NULL    |    | 
| purple_id | int(11)  | NO | MUL | NULL    |    | 
| status | varchar(32) | NO |  | display    |    | 
| played_on | datetime | NO |  | 2012-04-06 13:53:55 |    | 
+-----------+-------------+------+-----+---------------------+----------------+ 
5 rows in set (0.00 sec) 

mysql> DESCRIBE teams; 
+---------+-------------+------+-----+------------+----------------+ 
| Field | Type  | Null | Key | Default | Extra   | 
+---------+-------------+------+-----+------------+----------------+ 
| id  | int(11)  | NO | PRI | NULL  | auto_increment | 
| outcome | varchar(32) | NO |  | incomplete |    | 
+---------+-------------+------+-----+------------+----------------+ 
2 rows in set (0.00 sec) 

mysql> DESCRIBE teams_players; 
+-------------+---------+------+-----+---------+----------------+ 
| Field  | Type | Null | Key | Default | Extra   | 
+-------------+---------+------+-----+---------+----------------+ 
| id   | int(11) | NO | PRI | NULL | auto_increment | 
| team_id  | int(11) | NO | MUL | NULL |    | 
| summoner_id | int(11) | NO | MUL | NULL |    | 
+-------------+---------+------+-----+---------+----------------+ 
3 rows in set (0.00 sec) 

答えて

1

あなたplayed_ondatetimeであり、あなたがdate多分それはあなたの問題だとそれを比較しています。あなたは試してみてください。また

WHERE 
    DATE(b.played_on) = DATE(NOW()) 

あなたがs.in_queueとはどういう意味ですか? ANDを忘れましたか?あなたはあなたが条件を満たしているレコードの数を取得するために副選択を使用するつもりだ、との条件が偽であればそれはあなたに0を返します

WHERE 
    DATE(b.played_on) = DATE(NOW()) 
    AND 
    s.in_queue; 
1

を意味しますか。

(SELECT COUNT(*) FROM matches b WHERE b.blue_id = t.id AND b.played_on = DATE(NOW())) AS playedToday 

の線に沿って何か、あなたがmatchesテーブルと日付をチェックWHERE句にLEFT JOINを削除したいと思うでしょう。

関連する問題