Seite 1 von 1
50 Einträge neuesten Datums abfragen
Verfasst: Mittwoch 23. März 2011, 14:42
von nvidia
Code: Alles auswählen
//Pseudocode
Abfrage = "SELECT val, date FROM table WHERE val='blabla' AND val2='bubu' ORDER BY DATE DESC"
Abfrage[0:50]
Hallo geht das hier auch nur mit der Datenbank, so das ich nicht unnötig alle anderen Reihen abfragen muss und dann am schluss den rest trennen muss.
Mit Limit 50 funktioniert das nicht, weil sich dann ORDER BY nicht auf alle Einträge bezieht, sondern nur auf die 50 ausgewählten.
Re: 50 Einträge neuesten Datums abfragen
Verfasst: Mittwoch 23. März 2011, 14:58
von BlackJack
@nvidia: Sicher dass das mit LIMIT nicht geht? Welches DBMS steht denn dahinter?
Re: 50 Einträge neuesten Datums abfragen
Verfasst: Mittwoch 23. März 2011, 16:35
von Hyperion
BlackJack hat geschrieben:@nvidia: Sicher dass das mit LIMIT nicht geht? Welches DBMS steht denn dahinter?
Afair ist LIMIT kein SQL-Standard und wurde (wird?) daher tatsächlich von DBs wie Oracle nicht implementiert. Zumindest bin ich da mal vor Jahren bei einer SQL-Nachhilfe drüber gestoßen, wo der Prof die Studis mit einer netten verschachtelten Query diesbezüglich gequält hat. Hatte mich damals selber gewundert, da ich das einfach mittels LIMIT gelöst hatte.
Evtl. ist Dir das aber auch bewusst; Deine Nachfrage kann man so oder so interpretieren

Re: 50 Einträge neuesten Datums abfragen
Verfasst: Mittwoch 23. März 2011, 18:02
von BlackJack
@Hyperion: Das war mir bewusst, deshalb habe ich auch gefragt. Bei PostgreSQL und SQLite wird das LIMIT erst am Schluss angewendet. Ich kann mir aber auch kaum vorstellen dass es DBMS gibt, die das anders handhaben, denn sonst wäre das IMHO ziemlich nutzlos in der Praxis.
Re: 50 Einträge neuesten Datums abfragen
Verfasst: Mittwoch 23. März 2011, 21:08
von noisefloor
Hallo,
MySQL wendet LIMIT auch am Ende an. IMHO macht LIMIT auch nichts anderes, als die Ausgabe des Abfrageergebnisses auf X Zeilen zu beschränken.
Sonst könnten auch (MySQL-) Abfragen wie
gar nicht funktionieren...
Gruß, noisefloor
Re: 50 Einträge neuesten Datums abfragen
Verfasst: Mittwoch 23. März 2011, 21:57
von deets
Hyperion hat geschrieben:BlackJack hat geschrieben:@nvidia: Sicher dass das mit LIMIT nicht geht? Welches DBMS steht denn dahinter?
Afair ist LIMIT kein SQL-Standard und wurde (wird?) daher tatsächlich von DBs wie Oracle nicht implementiert. Zumindest bin ich da mal vor Jahren bei einer SQL-Nachhilfe drüber gestoßen, wo der Prof die Studis mit einer netten verschachtelten Query diesbezüglich gequält hat. Hatte mich damals selber gewundert, da ich das einfach mittels LIMIT gelöst hatte.
Das Problem bei ORACLE ist nicht LIMIT, sonder OFFSET (oder das LIMIT-mit-zwei-Argumenten). LIMIT bekommt man naemlich mit ROWNUM gebastelt (ROWNUM < X), aber OFFSET nicht. Damit muss man dann entweder alles vor dem OFFSET wegwerfen, oder man baut eine nested Query, die das serverseitig tut - aber an Effizienz verliert.
Letztlich muessen aber alle DBs die Ordnung ueber alle Zeilen berechnen, wirklich viel verlieren tut man also nicht.
Edit: das ist natuerlich Unsinn was ich da schrieb. Eine DB mit Limit kann natuerlich nur bis zum gewuenschten Limit sortieren - das spart schon was. Nicht die Welt, aber wenn ich schon klugscheisse...

Re: 50 Einträge neuesten Datums abfragen
Verfasst: Mittwoch 23. März 2011, 23:45
von /me
deets hat geschrieben:Eine DB mit Limit kann natuerlich nur bis zum gewuenschten Limit sortieren - das spart schon was. Nicht die Welt, aber wenn ich schon klugscheisse...

Plötzlich wird das simple Bubblesort wieder interessant.
Re: 50 Einträge neuesten Datums abfragen
Verfasst: Mittwoch 23. März 2011, 23:52
von deets