Sven Rautenberg: Problem mit MAX(id)

Beitrag lesen

Moin!

Kann mir jemand sagen warum das unten angeführten Script nicht funkt???

Die Datenbank kann dir das sagen. Frage sie!

Ich möchte den letzten eingetragenen datensatz der ident mit der variablen $abteilung ist anzeigen. Die Variable $abteilung wird mittels Link von einer anderen Seite mitübergeben. Ist auch vorhanden (echo).

<?
include("config.php");
$abteilung=$abteilung;
$sql="SELECT MAX(id),titel,nachricht,datum FROM news WHERE abteilung='$abteilung'";
$result=mysql_query($sql);

$result = mysql_query($sql) or die("Fehler beim Query: ".mysql_error());

Es hat wenig Sinn, irgendwelche Datenbankabfragen zu machen, ohne für eine vernünftige Fehlerabfrage zu sorgen. Die Methode mit die() sorgt zur Entwicklungszeit im Fehlerfall zumindest für einen Skriptabbruch mit Ausgabe der SQL-Fehlermeldung. Produktive Skripte sollten an dieser Stelle ein Logfile mit dieser Information füllen, und es sollte irgendein sinnvolles Alternativprogramm gefunden werden.

Die SQL-Fehlermeldung wird dich darüber informieren, dass du MAX() ohne GROUP BY verwendet hast. Wenn du das Maximum aus einer Wertemenge herausfinden willst, mußt du logischerweise mehr als einen Wert haben, aus dem du einen auswählen kannst. GROUP BY faßt dir gewisse DB-Einträge, die in irgendeinem Kriterium übereinstimmen, zusammen. In deinem Fall eignet sich vermutlich die DB-Spalte "abteilung" zum Gruppieren.

Dann kommt aber das nächste Problem: Du hast mindestens zwei Einträge, die zusammengruppiert werden. Als ID nimmst du die größte der Einträge. Aber welchen der zwei (oder mehr) Einträge der Spalten Titel, Nachricht und Datum soll genommen werden? Es ist leider nicht so, dass MAX() in der einen Spalte automatisch die zugehörigen Einträge des Datensatzes auch in den anderen Spalten selektiert.

Das bedeutet: Du mußt das Problem anders lösen. :) Finde zuerst die Maximale ID heraus. Suche mit dieser ID dann den zugehörigen Datensatz heraus.

Das kannst du wahlweise in zwei Querys machen, oder vielleicht mit einem JOIN in einem Query - da bin ich mir allerdings jetzt nicht 100% sicher und habe auch gerade keine Gelegenheit, das auszuprobieren.

- Sven Rautenberg

--
ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|