MySQL Query
Dieter Raber
- datenbank
Hallo,
Ich hab ein Problem mit einer Abfrage in MySQL. Meine Tabelle sieht etwa so aus:
mediumint - 'id' -> autoincrement, primary etc
mediumint - 'lastscore'
smallint - 'beispiel'
.
. weitere Fields
Ich haette gerne als Ergebnis der Abfrage 'id', 'lastscore' u. 'beispiel' aus dem Record mit der hoechsten id, also max(id).
Leider tue mich etwas schwer damit , die Query richtig zu formulieren, kann mir bitte jemand dabei helfen?
Danke schonmal
Dieter
Hi Dieter
Ich haette gerne als Ergebnis der Abfrage 'id', 'lastscore' u. 'beispiel' aus dem Record mit der hoechsten id, also max(id).
Leider tue mich etwas schwer damit , die Query richtig zu formulieren, kann mir bitte jemand dabei helfen?
Deine Freunde sind Order by und Limit. Du sortierst nach der ID so das die höchste zuerst kommt, dann schränkst du das Ergebnis mit Limit auf eine einzige Zeile (die erste mit der höchsten ID) ein.
Gruss Daniela
Hallo Daniela,
Das ging schnell, dankeschoen.
Ich hatte in der urspruenglichen Query nur die ID gebraucht, was ich mit max(id) gemacht hab. Bei Deiner Loesung, die ich auch nachvollziehen kann, muss ich durch die ganze Tabelle rauschen, das missfaellt mir etwas. Meinst Du, das liesse sich mit etwas in der Art von max(id) umgehen, oder bin ich da etwas blauaeugig?
Dieter
Hi!
Ich hatte in der urspruenglichen Query nur die ID gebraucht, was ich mit max(id) gemacht hab. Bei Deiner Loesung, die ich auch nachvollziehen kann, muss ich durch die ganze Tabelle rauschen, das missfaellt mir etwas. Meinst Du, das liesse sich mit etwas in der Art von max(id) umgehen, oder bin ich da etwas blauaeugig?
Wenn Du die maximale ID haben willst _musst_ Du "durch die ganze Tabelle rauschen", eben um den höchten der Einträge zu finden. Sicher kann man das erheblich verbessern indem Du einen Pimärschlüssel auf die ID-Spalte legst, dann muss nur noch der Index durchrauscht werden, und das geht zumeist erheblich schneller.
Grüße
Andreas
Hallo Andreas,
Danke fuer die Antwort, an meinen SQL-Kenntnissen muss ich wohl noch ordentlich feilen...
Dieter
Hi Dieter
Ich hatte in der urspruenglichen Query nur die ID gebraucht, was ich mit max(id) gemacht hab. Bei Deiner Loesung, die ich auch nachvollziehen kann, muss ich durch die ganze Tabelle rauschen, das missfaellt mir etwas. Meinst Du, das liesse sich mit etwas in der Art von max(id) umgehen, oder bin ich da etwas blauaeugig?
Bist du, max(id) macht dir nichts anderes als genau das. Zudem bräuchtest du Subselects um mit max(id) weiterzukommen. Die kann MySQL aber unter 4.1 noch nicht. Du kannst nicht gleichzeitig in der Select Zeile Aggregatsfunktionen gebrauchen und Felder die nicht im Group by stehen oder ebenfalls innerhalb einer Aggregatsfunktion. Siehe zum warum auch: http://aktuell.de.selfhtml.org/tippstricks/datenbanken/having/index.htm
Gruss Daniela
Hallo Daniela,
danke fuer den Link, den Artikel werde ich morgen Ruhe lesen. In SQL bin ich halt nicht so der grosse Held, aber immer froh, was dazuzulernen.
Dieter