[MySql] neusten Datensatz einer Tabelle Abfragen

benny17

Commander
Mitglied seit
24.10.2003
Beiträge
157
Renomée
0
moin,

ich hab folgendes problem:

ich möchte mir auf meiner page den inhalt einer bestimmten spalte des jeweilig neusten datensatzes in meiner tabelle abfragen und dann pe php ausgeben lassen.

doch wie kann ich das per mysql abfrage geschict lösen?
ich habe es bis jetzt so gelöst:

ich frage per select alle daten in der tabelle ab, zähle sie anschließend mit count durch und anhand des countergebnisses habe ich dann die anzahl, ergo auch die id (den primärschlüssel) . mit SELECT titel FROM tbl_test WHERE id=$count; habe ich dann mein gewünschtes ergebnis, jedoch recht umständlich und unkomportabel für den fall, dass mal ein datensatz gelöscht wird. dann würde das countergebnis ja nciht mehr mit der neusten id übereinstimmen, da auto_increment dies ja nicht berücksichtigt...

also ich suche einfach eine abfrage möglichkeit, die mir den neusten datensatz ausspuckt. am besten wäre da ein kommando, was die höchse id findet. hoffe ich bekomm hier ne hilfreiche antwort :)
 
Hey Benny,

das sollte eigentlich sehr simpel gehen:

SELECT MAX(id) FROM tbl_test; und schon hast du deine max id
SELECT titel FROM tbl_test WHERE id=$max_id;

Wahrscheinlich kann man beide Abfragen sogar schachteln, aber grad komm ich spontan nicht drauf:]

MfG,
ThreeD
 
Als nur 1 Abfrage sieht das Ganze z.B. so aus:

SELECT titel FROM tbl_test ORDER BY id DESC LIMIT 1;

Wie man das mit MAX schachtelt weiß ich such grad nicht...

Gruß,

Chris
 
Hey Benny,

das sollte eigentlich sehr simpel gehen:

SELECT MAX(id) FROM tbl_test; und schon hast du deine max id
SELECT titel FROM tbl_test WHERE id=$max_id;

Wahrscheinlich kann man beide Abfragen sogar schachteln, aber grad komm ich spontan nicht drauf:]

MfG,
ThreeD

Das kann man (ab MySQL 4.1) so zusammenfassen:

SELECT titel FROM tbl_test WHERE id=(SELECT MAX(id) FROM tbl_test);

Gruß,
BoMbY
 
SELECT LAST_INSERT_ID()


funktioniert auch supi :)
 
SELECT LAST_INSERT_ID()


funktioniert auch supi :)
Wie sieht da die genaue Syntax aus? wird bei mir nix:

select last_insert_id() --> gibt mir "0" aus
select last_insert_id() from table --> gibt mir so oft "0" aus wie's Zeilen in der Tabelle gibt
select last_insert_id(id) from table --> gibt mir dasselbe aus wie select id from table

id ist ne Auto_Increment spalte.
Irgend ne Idee?
 
Wie sieht da die genaue Syntax aus? wird bei mir nix:

select last_insert_id() --> gibt mir "0" aus
select last_insert_id() from table --> gibt mir so oft "0" aus wie's Zeilen in der Tabelle gibt
select last_insert_id(id) from table --> gibt mir dasselbe aus wie select id from table

id ist ne Auto_Increment spalte.
Irgend ne Idee?

Die Funktion funktioniert nur direkt nach einem Insert-Statement, auf eine Tabelle mit einem Auto-Increment-Key.

http://www.mysql.org/doc/refman/5.1/de/example-auto-increment.html:
Sie können den aktuellen AUTO_INCREMENT-Wert mit der SQL-Funktion LAST_INSERT_ID() oder der C-API-Funktion mysql_insert_id() abrufen. Diese Funktionen sind verbindungsspezifisch, d. h., ihre Rückgabewerte werden nicht durch eine andere Verbindung beeinträchtigt, die ebenfalls Einfügeoperationen durchführt.
 
Zuletzt bearbeitet:
ja genau, LAST_INSERT_ID() funktioniert nur direkt nach einem INSERT.

Ist dann aber eigentlich besser als ein Konstrukt mit MAX. Gerade bei häufigen INSERTS könnte man sonst schon eine ID "zuweit" erwischen.

Aber für Dein spezifisches Problem ist MAX wohl besser.

Ich würde allerdings bei jedem Datensatz einen Timestamp (DATE_TIME) mit abspeichern - mit NOW() - , so kann man sehr elegant den neuesten Eintrag ermitteln und es ist eigentlich meist interessant wann genau ein Datensatz angelegt wurde. Aus DATE_TIME kannst Du auch alles denkbare extrahieren (Jahr, Monat, Tag, Wochentag, Stunde, Woche ....).
 
Zurück
Oben Unten