dedlfix: Gezielte Tabellenabfrage

Beitrag lesen

Tach!

ich möchte Euch mit meinem Problem belästigen, da ich auf der Stelle trete. Es geht um eine Datenbank-/Tabellenabfrage, die nur die jeweils neuesten Einträge ausgeben soll. Genauer:
In meiner Tabelle stehen z.Zt. 3 Einträge (zum Testen):

  1. Klaus, id = 3, text = test1
  2. Dieter, id = 5, text = test2
  3. Klaus, id = 7, text = test3

Das gewünschte Ergebnis bei Ausgabe müsste sein:

  1. Klaus + test3
  2. Dieter + test2

Die neuesten Einträge? Ich seh da gar kein Datum. Der numerische Wert der ID ist keine Garantie für das Alter eines Datensatzes.

Hier mein Code:
$frage = mysql_query("select name,text from $tabelle where id = (select MAX(id) from $tabelle) GROUP BY name");

PHP-Code interessiert an der Stelle nicht. Bitte weglassen und nur das SQL zeigen. Jedenfalls findet das WHERE eher statt als das GROUP BY. Die Abfrage kann nur einen einzigen Wert liefern. Das GROUP BY kann daran auch nichts mehr ändern.

Hier bekomme ich zwar das richtige Ergebnis geliefert, aber leider nur EINEN Eintrag, nämlich den 3. von Klaus. Sonst nix.

Und hierbei:
$frage = mysql_query("select name,text,MAX(id) from $tabelle GROUP BY name" );
bekomme ich 2 Einträge (Dieter und Klaus), bei Klaus jedoch ist die ID richtig (7), der Text (test1) aber der falsche!
Für mich wäre wieder mal logisch, dass zur MAX(id) auch der dazugehörige Text geliefert wird. Scheint aber nicht so zu sein.

Diese Syntax ist nur bei MySQL gültig. Üblich ist ansonsten, dass man beim Gruppieren nur die Spalten selektieren darf, über die man gruppiert hat oder auf die man Aggregatfunktionen angewendet hat. MySQL liefert für andere Felder einen x-beliebigen Wert aus der Gruppe. Stell dir vor, du verwendest MAX() und MIN(), welcher Wert soll dann in die Ergebnismenge kommen?

Um dein Anliegen zu lösen, musst du zuerst die gesuchten IDs ermitteln und dann kannst du zu diesen die passenden Datensätze abfragen.

SELECT felder FROM tabelle WHERE id IN(SELECT MAX(id) FROM tabelle GROUP BY ...)

dedlfix.