Problem mit MAX(id)
Gerd
- datenbank
Hallo
Kann mir jemand sagen warum das unten angeführten Script nicht funkt??? 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).
Danke
Gerd
<?
include("config.php");
$abteilung=$abteilung;
$sql="SELECT MAX(id),titel,nachricht,datum FROM news WHERE abteilung='$abteilung'";
$result=mysql_query($sql);
while($row=mysql_fetch_array($result))
{
$id=$row["id"];
$titel=$row["titel"];
$nachricht=$row["nachricht"];
$datum=$row["datum"];
$nachricht = nl2br($nachricht);
?>
<table width="590" border="0" cellspacing="0" cellpadding="0">
<tr>
<td>
News vom <? echo $datum; ?><br>
<b><? echo $titel; ?></b><br>
<? echo $nachricht; ?>
</td>
</tr>
</table>
<br>
<?
}
?>
abend,
lass dir die sql-anweisung einmal ausgeben und teste es dann direkt
mit mysql im cmd oä. dann bekommst du wenigstens ne fehlermeldung..
mfg,
(tanz das)
Z.N.S.
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
Hi Sven
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.
Das ist gar nicht nötig, ein bisschen spielen mit Order By und Limit reicht.
Gruss Daniela
Moin!
Das ist gar nicht nötig, ein bisschen spielen mit Order By und Limit reicht.
Du hast Recht. <patschanstirn> & <klopfaufholzwegenbrettvormkopf/>
- Sven Rautenberg
Hi Gerd,
Kann mir jemand sagen warum das unten angeführten Script nicht funkt???
definiere funkt. Was passiert, was soll passieren, gibt es fehlermeldungen?
$sql="SELECT MAX(id),titel,nachricht,datum FROM news WHERE abteilung='$abteilung'";
wenn Du eine Gruppenfunktion verwendest muss der Restliche Anteil in einer group by -Anweisung stehen
SELECT MAX(id),titel, nachricht,datum FROM news WHERE abteilung='{$abteilung}' GROUP BY titel,nachricht,datum
das hättest Du aber rausgefunden mit der Datenbankfehlermeldung, die bestimmt ausgegeben wird. Ausserdem könntest Du diese auch mit or die(mysql_error()) ausgeben lassen.
ciao
romy
Danke für Eure Hinweise. Werd mich jetzt mal wieder mit Hilfe Eurer Tips über das Script stürtzen.
Danke und schönes WE an alle
Gerd