Homepage selbermachen 7.852 Themen, 35.619 Beiträge

mysql einträge rückwärts auslesen

mrkingkurt / 29 Antworten / Baumansicht Nickles

Hallo...
Ich hab da mal ne Frage zu einem php-script.


Ich will aus einer Mysql-Tabelle die neuesten 15 Einträge RÜCKWÄRTS auslesen.


So weit bin ich:


SELECT * FROM inlingen_community_chat ORDER BY id DESC LIMIT 15


jetzt will ich aber dass der letzte Eintrag unten steht und der älteste oben...


Wie mach ich das??


Danke,
MFG Kurty

bei Antwort benachrichtigen
Pitje_Puck mrkingkurt „mysql einträge rückwärts auslesen“
Optionen

SELECT * FROM inlingen_community_chat ORDER BY id ASC LIMIT 15

bei Antwort benachrichtigen
mrkingkurt Nachtrag zu: „mysql einträge rückwärts auslesen“
Optionen

danke so gehts...

bei Antwort benachrichtigen
xafford mrkingkurt „mysql einträge rückwärts auslesen“
Optionen

Oder einfach nur:
SELECT * FROM inlingen_community_chat ORDER BY id LIMIT 15

Aufsteigende Reihenfolge ist nämlich die Standardeinstellung.

Pauschalurteile sind immer falsch!!!
bei Antwort benachrichtigen
matren xafford „Oder einfach nur: SELECT FROM inlingen_community_chat ORDER BY id LIMIT 15...“
Optionen

ääh, wenn ichs richtig verstanden habe sollen die 15 neuesten Einträge rauskommen. Vorausgesetzt die id wird aufsteigend generiert, dann kommen mit
SELECT * FROM inlingen_community_chat ORDER BY id LIMIT 15
nur die ersten 15 Einträge raus (also die 15 ältesten).
Oder ?

Mit MySQL habe ich normalerweise nichts am Hut.
Da ich aber keine verschachtelten Queries verwenden kann, würde ich
SELECT * FROM inlingen_community_chat ORDER BY id DESC LIMIT 15
verwenden, daß in assoziatives array laden und dann ein reverse drauf machen (da gibt es soweit ich weiß einen Befehl in PHP dafür).


bei Antwort benachrichtigen
Pitje_Puck matren „ääh, wenn ichs richtig verstanden habe sollen die 15 neuesten Einträge...“
Optionen

Ich halte generell nichts von der Minimierung, nur um 3 bzw. 4 Lettern zu sparen. Desc (Descendere) Asc (Ascendere) kommt aus dem Lateinischen und auch im Englischen gebraucht, Ab bzw. aufsteigend. Im Zweifelsfalle einfach mal probieren, wenn man sich unsicher ist, die Möglichkeiten sind ja nur 50/50. Ich habe schon die Erfahrung gemacht, dass ältere MySQL funktionen dann kunterbunte Ausgabe machen, da die IS nicht aufsteigend generiert wurde, also ich würde mich nicht drauf verlassen, lieber die Sortierungsklausel dazuschreiben

bei Antwort benachrichtigen
xafford matren „ääh, wenn ichs richtig verstanden habe sollen die 15 neuesten Einträge...“
Optionen

Einschränkende Kriterien kommen in eine WHERE-Klausel. Wenn ihr gewünschtes Ergebnis bei
SELECT * FROM blablubb ORDER BY id ASC
richtig rauskommt, dann kommt es auch bei
SELECT * FROM blablubb ORDER BY id
so raus, da es der gleiche Ausdruck ist.
Man sollte auch nie mehr von der Datenbank an das Script sende lassen, da Scripte wesentlich langsamer in der Datenverwaltung sind, als eine Datenbank, die dafür geschaffen ist. Gerade wenn es darum geht große Datenmengen in ein Array zu laden wird das spürbar.

Pauschalurteile sind immer falsch!!!
bei Antwort benachrichtigen
Pitje_Puck xafford „Einschränkende Kriterien kommen in eine WHERE-Klausel. Wenn ihr gewünschtes...“
Optionen

Gerade bei diesem Thema ist es auch sinnvoll, zu erwähnen, dass immer wieder der beliebte Timestamp der so simplen DATETIME funktion vorgezogen wird, um _lediglich_ das Datum formatiert auszulesen, was ebenfalls nicht sehr performant ist.

bei Antwort benachrichtigen
matren xafford „Einschränkende Kriterien kommen in eine WHERE-Klausel. Wenn ihr gewünschtes...“
Optionen

Hier geht es nicht darum alle Daten auszulesen und sie dann zu verarbeiten, sondern erstmal überhaupt die richtigen Daten auszulesen.
Das Statement liefert definitiv die falschen Daten.

bei Antwort benachrichtigen
matren Nachtrag zu: „Hier geht es nicht darum alle Daten auszulesen und sie dann zu verarbeiten,...“
Optionen

Oder anders gesagt:

SELECT * FROM
(
SELECT * FROM inlingen_community_chat ORDER BY id DESC LIMIT 15
}
ORDER BY ID

wäre die Lösung für MySQL 5.0

bei Antwort benachrichtigen
Pitje_Puck matren „Oder anders gesagt: SELECT FROM SELECT FROM inlingen_community_chat ORDER BY id...“
Optionen

Waraum macht ihr es euch Kompliziert, wenns auch einfach geht? Schliesslich ist doch der einzige Punkt, statt DESC eben ASC zu verwenden, wozu dann die Denküberlegungen, die alles nur noch komplizierter machen und dann auch noch (u.U.) falsch sind

bei Antwort benachrichtigen
matren Pitje_Puck „Waraum macht ihr es euch Kompliziert, wenns auch einfach geht? Schliesslich ist...“
Optionen

Also nochmal von vorne:
Ich habe eine Tabelle mit 1000 Datensätzen. Ein ID Feld ist vorhanden mit aufsteigender nummerierung (primary key, autoincrement).

Ich möchte nun die 15 neuesten Datensätze auslesen und zwar so daß die
Ergebnisse in aufsteigender Reihenfolge ausgegeben werden:


986
987
988
...

Dazu kann ich das ID Feld verwenden, da neere Datensätze immer eine größere ID haben.

Mit "select * from xxx order by id (asc) LIMIT 15" erhalte ich die 15 allerersten Einträge. Also die ältesten Einträge überhaupt, das Ergebnis meiner Abfrage wird sich nie ändern:

1
2
3
...

Die Abfrage "select * from xxx order by id DESC LIMIT 15" hingegen liefert mir tatsächlich die 15 neuesten Einträge. Also das was ich auch abfragen wollte. NUR, die Daten kommen in absteigender Reihenfolge:

1000
999
998
...

Es geht also nicht darum ob DESC oder ASC. ASC fällt definitiv flach.

bei Antwort benachrichtigen
Pitje_Puck matren „Also nochmal von vorne: Ich habe eine Tabelle mit 1000 Datensätzen. Ein ID Feld...“
Optionen
SELECT * FROM inlingen_community_chat ORDER BY id ASC LIMIT 0,15

Hier habe ich bereits den passenden Query beschrieben, mehr kannst du mit der ID und Sortierung nciht machen, willst du nun spezielle Sortierungen, muss ich entweder wissen, wie sortiert werden soll oder mit PHP weiterhiin vorgehen, oder ich verstehe nicht, wo das Problem liegt, denn wenn ich eine Tabelle habe, die 15 neuesten Einträge will, definiere ich das mit limit 0,15 und die Sortierung nehme ich mit ASC/DESC vor, vielleicht ist im Query irgendwo ein Fehler

P.S: ... nur 15 würde ich nicht stehen lassen, nimm die 0,15 mit
bei Antwort benachrichtigen
jdeen matren „Also nochmal von vorne: Ich habe eine Tabelle mit 1000 Datensätzen. Ein ID Feld...“
Optionen

Hallo matren !

Das ist der einzige Beitrag, der genau zur Frage passt !
Und das auch noch mit Erklärung.
Müßte sogar funktionieren ! ;-)

Wenn es bei sql die Möglichkeit gibt, die Anzahl der Datensätze zu bestimmen, sollte auch folgende Konstruktion funktionieren :

... ORDER BY ID LIMIT ende-15,15
im klartext : bei 285 Datensätzen : LIMIT 270,15

Gruß jdeen

. . . when the kid next door walking on the moon . . .Wirklich gute Jdeen passen auf einen Bierdeckel
bei Antwort benachrichtigen
Pitje_Puck jdeen „Hallo matren ! Das ist der einzige Beitrag, der genau zur Frage passt ! Und das...“
Optionen

Wird aber bei 99,9% aller Datensätze ziemlich unbrauchbar sein, weil der Inhalt der Tabellen sich ja ändert bzw vermehrt oder verringert, gut man könnte nun mit Count(*) den inhalt bestimmen und dann immer 15 Subtrahieren etc etc. aber ich frage mich nochmal ohne jemandem zu nahe treten zu wollen, wozu das ganze? Ich habe nicht mal Rückmeldung, ob der Befehl von mir funktioniert mit dem .....ASC 0,15

Bevor man hier weiter mit Tipps umherwirft, wäre es sinnvoller, wenn der Fragesteller preisgibt, ob das nun gegangen ist oder nicht

bei Antwort benachrichtigen
Pitje_Puck Nachtrag zu: „Wird aber bei 99,9 aller Datensätze ziemlich unbrauchbar sein, weil der Inhalt...“
Optionen

Langsam fängt die Sache aber an, Spass zu machen, vielleicht fällt wem ja noch eine komplexere Variante ein, in der man z.B. durch die Quersumme die limit Anzahl ermittelt, die man natürlich zuvor durch eine komplexe Funktion aus der Anzahl der Tabellensätze, die man davor widerum ausgelesen und dreimal mit sich selbst multipliziert hat, .........

:-) nichts für ungut

bei Antwort benachrichtigen
jdeen Pitje_Puck „P.S.“
Optionen

Hallo Pitje_Puck

Nochmal zum Mitschreiben : Der Beitrag von matren ist der einzige , der zur Frage passt. Alles andere geht am Thema vorbei. Die Frage wurde ganz klar definiert. Die Antworter streiten sich darum, ob man nun asc schreiben soll oder nicht. Das bringt dem Fragesteller rein gar nichts. Er will ja nur die aktuellsten 15 Einträge absteigend (neuester Eintrag unten) angezeigt bekommen. Und hat das auch klar in seiner Frage definiert. Matren hat das mit einem Beispiel recht gut und plastisch erklärt.

Und zu Deinem Beitrag vom 28.10.2003 14:34:
mit "asc 0,15" kann ich im Moment gar nichts anfangen.

"Bevor man hier weiter mit Tipps umherwirft, wäre es sinnvoller, wenn der Fragesteller preisgibt, ob das nun gegangen ist oder nicht" :

Mein Beitrag war ganz klar als Frage gekennzeichnet:

"Wenn es bei sql die Möglichkeit gibt, die Anzahl der Datensätze zu bestimmen, sollte auch folgende Konstruktion funktionieren :

... ORDER BY ID LIMIT ende-15,15
im klartext : bei 285 Datensätzen : LIMIT 270,15 "


Gruß jdeen

. . . when the kid next door walking on the moon . . .Wirklich gute Jdeen passen auf einen Bierdeckel
bei Antwort benachrichtigen
Pitje_Puck jdeen „P.S.“
Optionen

Als MySQL Hobbybastler sage ich, dass MySQL recht mächtig ist, daher bekommt man mit der Limit und Sortierklausel _alles_ nötige hin, ich weiss nicht wo das Problem liegt.

Noch einmal:

Die Sortierungen DESC oder ASC werden auf den mit LIMIT ausgwählten Datenumfang angewendet, es gibt folglich nur 2 Möglichkeiten mit denen man hier sortieren kann, ab oder aufsteigend. Wo _ liegt _ das _ Problem???!!!

Ich sehe es nicht, sicher, wie ich sarkastisch versucht habe zu zeigen, gibts noch ein paar umständlichere Wege, aber ich sags nochmal, sobals du auch nur einen Datensatz addierst oder subtrahierst, bekommt man mit der Ausführung, die Du _so_ geschrieben hast, Probleme. Tabellen verwendet man vorrangig in dynamischen Seiten, wie das Wort schon sagt, dynamisch. Sollten sich die Daten nie ändern, dann braucht man sie nicht zu dynamischen Datensätzen zu wandeln sondern hält es statisch, das macht die Sache performant, doch da wir ja dynamische Daten haben, ändern sich diese eben vermutlich, und somit wird dein Tipp nur in einem Fall klappen, nämlich, wenn die Menge der Datensätze genau 285 Beträgt. Weitere Erklärungen hast du nicht ausgeführt

bei Antwort benachrichtigen
jdeen Pitje_Puck „P.S.“
Optionen

Sag mal , hast Du wirklich nicht gemerkt, daß die Zahl 285 nur als Beispiel anzusehen ist ?????????????
Sollte die Datenmenge zunehmen z.B. auf 287, so würde der Limit-Befehl "LIMIT 272,15" lauten und zwar dynamisch, da der Befehl "ende-15,15" lautet, also wird die erste bedingung immer wieder frisch berechnet. Die anzuzeigende Größe ist in diesem Beispiel immer 15.

Soll ich Dir jetzt noch ein Beispiel machen, wie es sich verhält, wenn die Anzahl der Datensätze sinkt? Oder hast Du's jetzt verstanden????????????

Gruß jdeen

. . . when the kid next door walking on the moon . . .Wirklich gute Jdeen passen auf einen Bierdeckel
bei Antwort benachrichtigen
Pitje_Puck jdeen „P.S.“
Optionen

Ich glaube du wirst unsachlich, deine Tipps treten auf der Stelle, ich denke wir lassen das bleiben und ich bringe das zu einem Ende, bevor du wieder denkst statt schreibst, denn ich glaube der Fragesteller weiss weder, wie er die summe der Datensätze errechnet, noch wie er eine Variable daraus formt, die das entsprechend für ihn abnimmt.



bei Antwort benachrichtigen
jdeen Pitje_Puck „Bringen wir das zum Ende“
Optionen

Ja, dann sag es ihn doch, wie es geht !
Aber woher willst Du wissen was der Fragesteller weiß ???
Hast Du ihn gefragt ?

Und tschüß

. . . when the kid next door walking on the moon . . .Wirklich gute Jdeen passen auf einen Bierdeckel
bei Antwort benachrichtigen
Pitje_Puck jdeen „Bringen wir das zum Ende“
Optionen

Wer nicht weiss, wie er sortieren muss, weiss _das_ garantiert auch nicht

bei Antwort benachrichtigen
xafford matren „Hier geht es nicht darum alle Daten auszulesen und sie dann zu verarbeiten,...“
Optionen

Is ja schon gut, nicht aufregen ;o)...Ich habe ja nur geschrieben, daß ASC optional ist und weggelassen werden kann, nicht mehr und nicht weniger.

Pauschalurteile sind immer falsch!!!
bei Antwort benachrichtigen
Pitje_Puck xafford „Is ja schon gut, nicht aufregen o ...Ich habe ja nur geschrieben, daß ASC...“
Optionen

:-) eben ein Minimalist. Aber ich denke, man tut Anfängern keinen Gefallen damit. Bitte nimms nicht persönlich, aber ich glaube es ist sinnvoll, gerade dann, weil garantiert sonst 3 Tage später die gleiche Frage mit DESC statt ASC kommt und es sinnvoll ist, gleich per Tacheles zu sagen, wie die Möglichkeiten stehen

bei Antwort benachrichtigen
xafford Pitje_Puck „:- eben ein Minimalist. Aber ich denke, man tut Anfängern keinen Gefallen...“
Optionen

Naja, unterschied macht´s wirklich keinen...

Pauschalurteile sind immer falsch!!!
bei Antwort benachrichtigen
Pitje_Puck xafford „Naja, unterschied macht s wirklich keinen...“
Optionen

Hab ichs doch gewusst, Du hast meinen Beitrag persönlich genommen. Das war nicht meine Absicht

bei Antwort benachrichtigen
xafford Pitje_Puck „Hab ichs doch gewusst, Du hast meinen Beitrag persönlich genommen. Das war...“
Optionen

Nein, hab ich nicht. Wie kommst denn darauf? Ich wollte nur sagen, daß es rein technisch keinen Unterschied macht ob man´s nun schreibt oder net und das Du vom Aspekt des Lerneffekts aus recht hast. Hab ich wohl etwas zu knapp formuliert ;o)

Pauschalurteile sind immer falsch!!!
bei Antwort benachrichtigen
Pitje_Puck xafford „Nein, hab ich nicht. Wie kommst denn darauf? Ich wollte nur sagen, daß es rein...“
Optionen

Dann ist es in Ordnung. :-)

bei Antwort benachrichtigen
matren xafford „Is ja schon gut, nicht aufregen o ...Ich habe ja nur geschrieben, daß ASC...“
Optionen

Es ging mir prinzipiell nur um die Lösung des Ausgangsproblems.
Wenn "mrkingkurt" mit der ersten Lösung (richtig oder falsch) glücklich ist, sollten wir die Diskussion hier vielleicht einstellen. Ich glaube wir drehen uns hier nur im Kreis und langsam wirds schwierig in dieser Diskussion durchzublicken (werden langsam zuviele Einträge).

Lassen wir es einfach gut sein. ;) OK ?!!!

bei Antwort benachrichtigen
xafford matren „Es ging mir prinzipiell nur um die Lösung des Ausgangsproblems. Wenn mrkingkurt...“
Optionen

Si :o)

Pauschalurteile sind immer falsch!!!
bei Antwort benachrichtigen