Fehlende Werte durch Gruppierung

Hxrzxr

Neuer Benutzer
Beiträge
2
Hallo Forum,

ich habe folgende Tabelle:

CREATE TABLE `tabelle` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`typ` int(1) NOT NULL,
`pfadname` varchar(150) NOT NULL,
`quota` varchar(6) NOT NULL,
`datum` datetime NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `Index` (`typ`,`pfadname`,`quota`,`datum`)
) ENGINE=InnoDB AUTO_INCREMENT=391079 DEFAULT CHARSET=utf8;

Beispieldaten
INSERT INTO `tabelle` VALUES
(390217,1,'USERNAME','0,6','2017-03-06 13:24:39'),
(345847,1,'USERNAME','0,5','2017-03-01 11:57:50'),
(345853,6,'USERNAME\\Eigene Dateien','0,0','2017-03-01 11:57:50'),
(390223,6,'USERNAME\\Eigene Dateien','0,0','2017-03-06 13:24:39'),
(345869,7,'USERNAME\\Eigene Dateien\\Downloads','0,0','2017-03-01 11:57:50'),
(345870,7,'USERNAME\\Eigene Dateien\\Test','0,0','2017-03-06 13:24:39');

Meine Abfrage
SELECT
typ, pfadname,
SUM(IF(datum = '2017-03-06 13:24:39',1,0)) AS datum1,
SUM(IF(datum = '2017-03-01 11:57:50',1,0)) AS datum2,
IF(datum = '2017-03-06 13:24:39',quota,0) AS quota1,
IF(datum = '2017-03-01 11:57:50',quota,0) as quota2
FROM
tabelle
WHERE
(datum = '2017-03-06 13:24:39' OR datum = '2017-03-01 11:57:50')
AND (typ = 1 OR typ = 6 OR typ = 7)
AND pfadname LIKE 'USERNAME%'
GROUP BY pfadname
ORDER BY pfadname

Ziel
Damit erhalte ich eine Übersicht je Pfadname und je Datum mit der Info, ob ein Pfad existierte.
Zusätzlich benötige ich aber von der Abfrage noch die Werte der Spalte quota je Datum.

Hier erhalte ich natürlich nur einen der beiden Werte durch meine Gruppierung am Ende. Ich benötige aber beide Quota-Werte damit ich einen davon später mit PHP anzeigen kann (den Wert vom aktuelleren Datum) und den zweiten Wert (vom älteren Datum) um damit rechnen zu können und die Änderung zum 1. Wert anzeigen kann.

Vielen Dank.
 
Werbung:
Das gezeigte Select ist syntaktisch falsch. Alle Spalten müssen entweder aggregiert oder gruppiert sein, dies ist nicht der Fall. Neues MySQL-Versionen und alle anderen Datenbanken erkennen dies als Fehler, nur bisherige MySQL-Versionen nicht.

Was soll, ausgehend von Deiner Tabelle, denn genau ausgegeben werden? Zeig Dein 'Wunschresultat'.
 
Werbung:
Hallo akretschmer,

dies hier wäre mein Wunschergebnis

Typ | Pfadname | datum1 | datum2 | quota1 | quota2
1 | USERNAME | 1 | 1 | 0,6 | 0,5
6 | USERNAME\Eigene Dateien | 1 | 1 | 0,0 | 0,0
7 | USERNAME\Eigene Dateien\Downloads | 0 | 1 | NULL | 0,0
7 | USERNAME\Eigene Dateien\Test | 1 | 0 | 0,0 | NULL


Aktuelle teste ich mit dieser Abfrage weiter
SELECT * FROM quota.tabelle;
SELECT
typ, pfadname,
SUM(IF(datum = '2017-03-06 13:24:39',1,0)) AS datum1,
SUM(IF(datum = '2017-03-01 11:57:50',1,0)) AS datum2,
group_concat(quota, '#'
order by datum DESC) as quota
FROM
tabelle
WHERE
(datum = '2017-03-06 13:24:39' OR datum = '2017-03-01 11:57:50')
AND (typ = 1 OR typ = 6 OR typ = 7)
AND pfadname LIKE 'USERNAME%'
GROUP BY pfadname
ORDER BY pfadname

Sieht so aus, als wenn es so klappt. Muss jetzt nur die Werte voneinander trennen in PHP.
Aber deine Hinweise möchte ich natürlich auch beachten. Meine Serverversion ist 5.7.9 (Windows).
 
Zurück
Oben