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.idと が一致することに注意してmatches.blue_idくださいmatches.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)
4

2 に答える 2

1

あなたplayed_ondatetimeそれを比較していますが、それがdateあなたの問題かもしれません。試してみてください:

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

とはどういう意味s.in_queueですか? ANDを忘れましたか?ということですか

 WHERE
    DATE(b.played_on) = DATE(NOW())
    AND
    s.in_queue;
于 2012-04-06T20:54:04.643 に答える
1

サブセレクトを使用して、条件に一致するレコードの数を取得する必要があり、条件が false の場合は 0 が返されます。の線に沿った何か

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

テーブルLEFT JOINへのと日付をチェックする句を削除する必要があります。matchesWHERE

于 2012-04-06T20:54:47.477 に答える