Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi GROUP BY verfälscht die Ergebnisse (https://www.delphipraxis.net/102188-group-verfaelscht-die-ergebnisse.html)

TheMiller 24. Okt 2007 18:55

Datenbank: MySQL • Version: 4 • Zugriff über: ZEOS

GROUP BY verfälscht die Ergebnisse
 
Hallo,

habe mal wieder ein Problem. Und zwar habe ich eine Software geschrieben, in die man sich einloggen kann. Jetzt habe ich eine Tabelle "logins", in der ALLE Logins liegen und eine Tabelle user, in der die Userdaten und Bilderpfade liegen.

Jetzt möchte ich auf der Hauptform die letzten Logins anzeigen und nach User gruppieren. Es sollen auch nur User angezeigt, deren Bildpfad im Profil nicht leer ist.

Dazu habe ich folgende SQL-Query

SELECT logins.*, profil.bildpfad FROM logins AS logins JOIN profil AS profil ON (logins.benutzerid = profil.benutzerid) WHERE bildpfad <> '' GROUP BY logins.benutzerid ORDER BY loginzeit DESC LIMIT 5;

Soweit so gut. Die Query wird ausgeführt und die Bilder werden angezeit - nur leider falsch:

Ich habe 500 Logins in der Tabelle verzeichnet. Der letzte Login ist von mir und ich habe ein Bild drin. Doch das Ergebnis beginnt nicht mit mir, sondern mit einem anderen User und lässt mich komplett außer Acht. Achso: Nicht nur micht, sondern auch andere. Die höchste ID ist nicht die 500 (ich), sondern die 478... warum auch immer. Zwischen 478 und 500 gab es mehrere Logins mit Bild.

Ich hoffe ich habe es genau genug erklärt und ihr könnt mir helfen...


Danke!!!

DeddyH 24. Okt 2007 19:02

Re: GROUP BY verfälscht die Ergebnisse
 
Ich denke mal, was Du möchtest, ist dies hier. Alternativ zu der dort beschriebenen Lösung könnte das Problem evtl. noch mit einer HAVING-Klausel hinter der Gruppierung zu lösen sein (muss ich aber noch einmal darüber nachdenken).

TheMiller 24. Okt 2007 21:13

Re: GROUP BY verfälscht die Ergebnisse
 
Hey ho!

Also, das funktioniert auch nicht so richtig. Ich bekomme immer die Fehlermeldung "Query was empty" - kann aber auch nicht sein.

Was ich vielleicht noch anmerken sollte ist, dass meine ursprüngliche Query aus Post1 funktioniert, wenn ich das GROUP BY weglasse. Doch dann habe ich mich zB 4x drin, wenn ich mich 4 mal einlogge. Sobald ich GROUP BY benutze, tritt das o.g. Verhalten auf...

mkinzler 24. Okt 2007 21:30

Re: GROUP BY verfälscht die Ergebnisse
 
Wie erwähnt muss es beim Gruppieren HAVING statt WHERE heißen.

omata 24. Okt 2007 23:22

Re: GROUP BY verfälscht die Ergebnisse
 
Hallo DJ-SPM,

vielleicht so...
SQL-Code:
SELECT l.benutzerid, p.bildpfad
FROM logins l
INNER JOIN profil p
  ON l.benutzerid = p.benutzerid
WHERE bildpfad <> ''
GROUP BY l.benutzerid, p.bildpfad
ORDER BY MAX(loginzeit) DESC LIMIT 5
Gruss
Thorsten

DeddyH 24. Okt 2007 23:24

Re: GROUP BY verfälscht die Ergebnisse
 
Damit würden ja nur die falschen Ergebnisse absteigend sortiert (oder habe ich jetzt einen Knoten im Hirn?).

mikhal 25. Okt 2007 07:18

Re: GROUP BY verfälscht die Ergebnisse
 
Ich vermisse im Select-Statement eine Gruppenfunktion(SUM, AVG, MIN, MAX, COUNT), ohne eine solche Gruppenfunktion macht ein GROUP BY keinen Sinn!

In deinem Fall solltest du eher eine Sortierung (DESC) auf die LogIn-Id ausführen, um die letzten fünf Logins mit Bild zu erhalten.

Nebenbei: steht in Bildpfad immer ein Leerstring? Ich würde eher auf NOT NULL testen.

Grüße
Mikhal

Elvis 25. Okt 2007 07:49

Re: GROUP BY verfälscht die Ergebnisse
 
Zitat:

Zitat von mikhal
Ich vermisse im Select-Statement eine Gruppenfunktion(SUM, AVG, MIN, MAX, COUNT), ohne eine solche Gruppenfunktion macht ein GROUP BY keinen Sinn!

Ist in der ORDER BY clause, falls du die Version von Thorsten meinst.

mkinzler 25. Okt 2007 08:01

Re: GROUP BY verfälscht die Ergebnisse
 
Zitat:

Ich vermisse im Select-Statement eine Gruppenfunktion(SUM, AVG, MIN, MAX, COUNT), ohne eine solche Gruppenfunktion macht ein GROUP BY keinen Sinn!
Er hat doch alle Felder der Auswahl in der Gruppierung

Elvis 25. Okt 2007 08:18

Re: GROUP BY verfälscht die Ergebnisse
 
Zitat:

Zitat von mkinzler
Er hat doch alle Felder der Auswahl in der Gruppierung

Er meinte es wohl genau andersrum: Warum gruppieren, wenn man es nicht müsste.
Aber ich glaube Michael hat einfach das "max" in der Sortierung übersehen. ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:39 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz