2016-07-30 12 views
1

Ich möchte zählen, wie viele einzigartige Spiele ein Benutzer gespielt wurde. Hier ist, wie die aktuelle SQL-Abfrage wie folgt aussieht:Mischen Sie die Zeilen und geben Sie mir die Gesamtzahl

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 

Und hier ist nun die Datenbank wie folgt aussieht:

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`) 
) 

Die SQL-Abfrage richtig zählt, aber es zählt nur 1 pro Zeile.

Beispiel, wie ich denke. Wenn der Benutzer mit der ID 1 24 Mal das gleiche Spiel gespielt hat (für ein Beispiel Battlefield 3), gibt es 1 gespieltes Spiel zurück. Wenn der gleiche Benutzer 37 Mal ein anderes Spiel spielt, gibt es 2 gespielte Spiele und so weiter.

SUM(DISTINCT ... funktioniert nicht, da es nur 1 mit der Spiel-ID ersetzen.

Wie kann ich die Zeilen summieren, so dass sie die Nummer 2 statt 2 Zeilen anzeigt?

Antwort

0

Sie können die Gruppe einfach nach Eigenschaft entfernen und die verschiedenen gespielten Spiele zählen. Es gibt die Anzahl der verschiedenen Spiele zurück, die der Benutzer gelegt hat. 1

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 mein Gott! Du hast recht! Zu viele Stunden mit diesem Code: P Vielen Dank! Ich werde Ihre Antwort so schnell wie möglich annehmen. – Erik

+0

Froh, dass es geholfen hat :) – Massanu

Verwandte Themen