Forum: PC-Programmierung sql datenbankausgabe auf letzte eingabe limitieren


von Pete O. (Firma: privat) (pete-bremen)


Lesenswert?

möchte gern meine Datenbankausgabe auf die zuletzt eingegebene Eingabe 
beschränken - hatte einst den Code i++; und dann irgendwas mit limit 1, 
wer kennt zufällig den vollen Code dafür ?

von zwieblum (Gast)


Lesenswert?

"zuletzt eingegebene Eingabe"  - du weisst aber schon was du machst, 
oder?

SELECT * FROM tbl LIMIT 1;

von Pete O. (Firma: privat) (pete-bremen)


Lesenswert?

allerdings weiß ich das - aber dieser Code gibt mir leider nur die 
zuerst eingegebenen Datensatz aus, ich will aber den letzen Datensatz 
haben ! Es soll ja nicht jeder immer den gleichen, vom ersten anmelder 
kriegen.

von Tim (Gast)


Lesenswert?

Sortiere doch absteigend nach dem Primärschlüssel und limitiere die 
Ausgabe auf 1.

von Pete O. (Firma: privat) (pete-bremen)


Lesenswert?

Tim schrieb:
> Sortiere doch absteigend nach dem Primärschlüssel und limitiere die
> Ausgabe auf 1.

ok, gern, aber wie ?

von Tim (Gast)


Lesenswert?

SELECT * FROM tbl ORDER BY primärschlüssel DESC LIMIT 1;

Wenn es genauer sein soll musst du mal das Schema rausrücken.

von Pete O. (Firma: privat) (pete-bremen)


Lesenswert?

Tim schrieb:
> SELECT * FROM tbl ORDER BY primärschlüssel DESC LIMIT 1;
>
> Wenn es genauer sein soll musst du mal das Schema rausrücken.

Aber das gibt doch nur den ersten Eintrag aus, oder ?

von Tim (Gast)


Lesenswert?

>Aber das gibt doch nur den ersten Eintrag aus, oder ?

Ja, den 1. Eintrag der Tabelle die nach dem Primärschlüssel rückwärts 
sortiert (ORDER BY ... DESC) wurde.
Ergo steht der letzte Eintrag oben. Genau den wolltest du doch,
oder habe ich etwas falsch verstanden?

von Pete O. (Firma: privat) (pete-bremen)


Lesenswert?

Tim schrieb:
>>Aber das gibt doch nur den ersten Eintrag aus, oder ?
>
> Ja, den 1. Eintrag der Tabelle die nach dem Primärschlüssel *rückwärts*
> sortiert (ORDER BY ... DESC) wurde.
> Ergo steht der letzte Eintrag oben. Genau den wolltest du doch,
> oder habe ich etwas falsch verstanden?

Stimmt, hatte ich dann wohl falsch verstanden, also kam der Tipp mit 
Select * und so weiter Desk limit 1; von Dir - ja ?

von Tim (Gast)


Lesenswert?

ja, "SELECT * FROM tbl ORDER BY primärschlüssel DESC LIMIT 1;"
hatte ich vorgeschlagen und weiter?

ggf gibt es ja bei deiner Datenbank noch schneller möglichkeiten.
Also Dokumentation lesen...

von Pete O. (Firma: privat) (pete-bremen)


Lesenswert?

Tim schrieb:
> ja, "SELECT * FROM tbl ORDER BY primärschlüssel DESC LIMIT 1;"
> hatte ich vorgeschlagen und weiter?
>
> ggf gibt es ja bei deiner Datenbank noch schneller möglichkeiten.
> Also Dokumentation lesen...

Nun, ich wollte mich nur dafür bedanken, da der Code funktioniert - habe 
ihn nun schon auf nem anderen externen Server abgesichert, um ihn nicht 
auch wieder zu verliehren - Danke !

von Julian O. (jaytech)


Lesenswert?

Hallo,

Wenn dein Primarykey auto-inkrement ist, bzw. dein letzter Eintrag immer 
den höchsten Wert hat, müsstest du mit folgendem Syntax deine letzte 
Eingabe abrufen können.

"SELECT * FROM tbl WHERE MAX(primärschlüssel);"

Gruß

von Vlad T. (vlad_tepesch)


Lesenswert?

das ganze ist trotzdem mit Vorsicht zu genießen.
wenn mehrere auf die Datenbank zugreifen (dafür sind sie ja schließlich 
da) kann es natürlich sein, dass der letzte Datensatz nicht der ist, den 
du zu finden erwartest.

hierfür muss das insert und das select teil einer transaktion sein.

von Pete O. (Firma: privat) (pete-bremen)


Lesenswert?

Vlad Tepesch schrieb:
> das ganze ist trotzdem mit Vorsicht zu genießen.
> wenn mehrere auf die Datenbank zugreifen (dafür sind sie ja schließlich
> da) kann es natürlich sein, dass der letzte Datensatz nicht der ist, den
> du zu finden erwartest.
>
> hierfür muss das insert und das select teil einer transaktion sein.

sorry, aber das verstehe ich nun überhaupt nicht.

von Vlad T. (vlad_tepesch)


Lesenswert?

session1  macht insert
session2  macht insert
session1  fragt nach max id -> bekommt id von insert aus session2
session2  fragt nach max id -> bekommt id von eigenem insert

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Wenn du nur die ID des zuletzt eingefügten Eintrags benötigst gibt es 
meisten die funktion last_insertid() welche Verbindungsbasiert arbeitet, 
also auch keine Probleme mit mehreren Zugriffen hat.

Transaktion funktioniert leider auch nicht auf jedem DBMS

von Pete O. (Firma: privat) (pete-bremen)


Lesenswert?

naja, für all dies, bin ich wohl noch zu wenig ein "Webdesigner und 
Programmierer" - eigentlich gar nicht.

von Mark B. (markbrandis)


Lesenswert?

Du könntest Dir ja ein Buch über SQL besorgen und es durcharbeiten.

von Jens G. (jensig)


Lesenswert?

die Sache mit dem PK hat aber einen Haken. Denn die Reihenfolge des PK's 
muß schließlich nicht mit der Reihenfolge der Eingaben zusammenhängen 
(je nachdem, was verantwortlich für das Auffüllen des PK ist).
Ich würde sowas evtl. mit einer Zusatzspalte machen, die automatisch mit 
jedem Insert einen höheren Wert bekommt, z.B. autoincrement, oder aber 
current Timestamp, den man als Default eintragen läßt, so daß man sogar 
weiß, wann was eingetragen wurde (weis nicht, ob das deine DB kennt). 
Das von Läubi angegebene last_insertid() kenne ich dagegen nicht - kenne 
mich mit SQL Server nicht weiter aus.

von Pete O. (Firma: privat) (pete-bremen)


Lesenswert?

Jens G. schrieb:
> die Sache mit dem PK hat aber einen Haken. Denn die Reihenfolge des PK's
> muß schließlich nicht mit der Reihenfolge der Eingaben zusammenhängen
> (je nachdem, was verantwortlich für das Auffüllen des PK ist).
> Ich würde sowas evtl. mit einer Zusatzspalte machen, die automatisch mit
> jedem Insert einen höheren Wert bekommt, z.B. autoincrement, oder aber
> current Timestamp, den man als Default eintragen läßt, so daß man sogar
> weiß, wann was eingetragen wurde (weis nicht, ob das deine DB kennt).
> Das von Läubi angegebene last_insertid() kenne ich dagegen nicht - kenne
> mich mit SQL Server nicht weiter aus.

Das läuft auf autoincrement ID

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Nein die Last Insert ID hat den Wert des letzten Inserts dieser kann 
aber ungleich dem aktuellem autoincrement sein...

Siehe: http://dev.mysql.com/doc/refman/5.1/de/information-functions.html

Wenn ich also den Wert für die auto_increment spalte (welche 
optimlaerweise  auch der Primary key ist) vorgebe hat es auch diesen 
Wert, wurde der Wert automatisch vergeben hat er eben jenen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.