www.mikrocontroller.net

Forum: PC-Programmierung sql datenbankausgabe auf letzte eingabe limitieren


Autor: Pete Ording (Firma: privat) (pete-bremen)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: zwieblum (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"zuletzt eingegebene Eingabe"  - du weisst aber schon was du machst, 
oder?

SELECT * FROM tbl LIMIT 1;

Autor: Pete Ording (Firma: privat) (pete-bremen)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Tim (Gast)
Datum:

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

Autor: Pete Ording (Firma: privat) (pete-bremen)
Datum:

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

ok, gern, aber wie ?

Autor: Tim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
SELECT * FROM tbl ORDER BY primärschlüssel DESC LIMIT 1;

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

Autor: Pete Ording (Firma: privat) (pete-bremen)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: Tim (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Pete Ording (Firma: privat) (pete-bremen)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: Tim (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Pete Ording (Firma: privat) (pete-bremen)
Datum:

Bewertung
0 lesenswert
nicht 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 !

Autor: Julian O. (jaytech)
Datum:

Bewertung
0 lesenswert
nicht 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ß

Autor: Vlad Tepesch (vlad_tepesch)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Pete Ording (Firma: privat) (pete-bremen)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Vlad Tepesch (vlad_tepesch)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Pete Ording (Firma: privat) (pete-bremen)
Datum:

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

Autor: Mark Brandis (markbrandis)
Datum:

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

Autor: Jens G. (jensig)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Pete Ording (Firma: privat) (pete-bremen)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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...

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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.