![]() |
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!!! |
Re: GROUP BY verfälscht die Ergebnisse
Ich denke mal, was Du möchtest, ist
![]() |
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... |
Re: GROUP BY verfälscht die Ergebnisse
Wie erwähnt muss es beim Gruppieren HAVING statt WHERE heißen.
|
Re: GROUP BY verfälscht die Ergebnisse
Hallo DJ-SPM,
vielleicht so...
SQL-Code:
Gruss
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 Thorsten |
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?).
|
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 |
Re: GROUP BY verfälscht die Ergebnisse
Zitat:
|
Re: GROUP BY verfälscht die Ergebnisse
Zitat:
|
Re: GROUP BY verfälscht die Ergebnisse
Zitat:
Aber ich glaube Michael hat einfach das "max" in der Sortierung übersehen. ;-) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:51 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz