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?
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
Froh, dass es geholfen hat :) – Massanu