2016-07-30 4 views
1

ユーザーが再生されたユニークゲームの数をカウントしたいと思います。ここでは、現在のSQLクエリがどのように見えるかです:データベースがどのように見える行をマージして合計の数を教えてください

SELECT COUNT(DISTINCT d.id_game) AS c 
FROM discord AS d 
JOIN discord_games AS dg 
ON d.id_game = dg.id 
WHERE d.id_user = '1' 
AND d.id_game != '0' 
GROUP BY d.id_game 
ORDER BY dg.data_name ASC 

そして、ここでは今だ:

CREATE TABLE IF NOT EXISTS `discord` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `id_user` int(11) NOT NULL, 
    `id_channel` varchar(50) NOT NULL, 
    `id_game` int(11) NOT NULL, 
    `data_muted_server` tinyint(4) NOT NULL, 
    `data_muted_self` tinyint(4) NOT NULL, 
    `data_deafen_server` tinyint(4) NOT NULL, 
    `data_deafen_self` tinyint(4) NOT NULL, 
    `data_suppressed` tinyint(4) NOT NULL, 
    `data_status` varchar(10) NOT NULL, 
    `datetime_logged` datetime NOT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `id` (`id`) 
) 


CREATE TABLE IF NOT EXISTS `discord_games` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `data_name` varchar(50) NOT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `id` (`id`) 
) 


CREATE TABLE IF NOT EXISTS `discord_users` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `data_id` text NOT NULL, 
    `data_name` varchar(50) NOT NULL, 
    `data_avatar` text, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `id` (`id`) 
) 

SQLクエリが正しくカウントが、それは唯一の行ごとに1をカウントします。

私がどのように考えているかの例。 ID 1のユーザーが同じゲームを24回プレイした場合(例Battlefield 3の場合)、1回のゲームを返します。同じユーザーが別のゲームを37回プレイした場合、2回のゲームなどが返されます。

SUM(DISTINCT ...はゲームIDで1を置き換えるだけなので、機能しません。

2行ではなく2行を表示するように行を合計するにはどうすればよいですか?

答えて

0

あなたは単にプロパティごとにグループを削除し、再生された別々のゲームを数えることができます。ユーザーが設定した別のゲームの数を返します。

SELECT COUNT(DISTINCT d.id_game) AS c 
FROM discord AS d 
JOIN discord_games AS dg 
ON d.id_game = dg.id 
WHERE d.id_user = '1' 
AND d.id_game != '0' 
ORDER BY dg.data_name ASC 
+0

Oh my!あなたが正しい!このコードで時間が長すぎます:Pありがとうございました!できるだけ早くあなたの答えを受け入れます。 – Erik

+0

うれしかった:) – Massanu

関連する問題