'TOP' nicht in MySQL?

Hi @ll,

im Brett „Programmierung“ hat vor kurzem jemand eine Frage gestellt, wie er die 10 letzten Einträge in einer Tabelle anzeigen kann (bei forlaufender id)

Ich riet ihm daraufhin folgendes:

SELECT TOP 10 \* FROM tabelle ORDER BY id;

Jemand anders meinte daraufhin daß TOP bei mySql einen Fehler verursachen würde. Jetzt bin ich einigermaßen verwirrt. Kann mich jemand aufklären?

cu, holli

Hi,

kann mich jemand aufklären?

Ja:
http://www.mysql.com/documentation/mysql/full/manual…

Dort findest Du kein TOP.

Allerdings kann ich Dir nicht sagen, wie Du das erreichst, was Du erreichen wolltest…

Gruß

J.

Hi @ll,

im Brett „Programmierung“ hat vor kurzem jemand eine Frage
gestellt, wie er die 10 letzten Einträge in einer Tabelle
anzeigen kann (bei forlaufender id)

Ich riet ihm daraufhin folgendes:
SELECT TOP 10 * FROM tabelle ORDER BY id;
Jemand anders meinte daraufhin daß TOP bei mySql einen Fehler
verursachen würde. Jetzt bin ich einigermaßen verwirrt. Kann
mich jemand aufklären?

cu, holli

Hi Holli,

der „Top“-Stuff ist kein standardisiertes SQL-Feature, gibt’s halt bei der MS-Jet-Engine. Bei MySQL gibt’s aber was ganz ähliches: Heißt „limit“.

Beispiele:

select * from Tabelle limit 10
(gibt die ersten 10 Datensätze zurück)

select * from Tabelle limit 20, 30
(gibt die ersten Datensätze 20-49 zurück, es wird bei 0 angefangen zu zählen)

select * from Tabelle limit 0, 10
(gibt die ersten 10 Datensätze zurück, gleich wie beim ersten Beispiel)

Mach’s gut.
Lala

Das Problem war aber die letzten Datensätze zu kriegen. Aber mit ein bischen Programmierung ind er Anwendung kriegt man das auch ohne spezielles SQL-Kommando hin (auch wenns wohl evtl. nen SQL-Call mehr braucht).

Bru

Hi Bruno,

sorry, das mit den „letzten“ hab ich in der Tat überlesen. Na ja, aber ich geb Dir da schon recht, dass man das dann glaub auch irgendwie hinkriegen kann, z. B. vorher mit count(*) die Gesamtanzahl der Datensätze rauskriegen und dann „limit“ drauf ansetzen oder direkt „limit 10“ verwenden aber dafür „order by … desc“ oder aber das ganze direkt mit einer einzigen Query rauskriegen, die 'ne Unterabfrage enthält (was in MySQL aber glaub garnicht oder nur sehr beschränkt möglich ist - meine MySQL-Erfahrung beträgt gerade mal 1 1/2 Stunden, sorry, falls das nicht so ganz korrekt sein sollte) und wahrscheinlich auch viel aufwendiger ist, anyway …

Viele Grüße
Lala

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

hi leute!
hatte ein ähnliches problem mit mysql…das mit dem limit 10 ider by desc ist vielleicht eine gute idee…hab aber nicht probiert obs geht…ich hab das gelöst mit einer schleife…da, es ja nicht sein muss, dass die id nummern forlaufend sind, wenn z.b einer mal einen datensatz rauslöscht…dann ist die ganz id:datensatz_nummer, diese 1:1 übersetzung eimer…
here we go:

$sql = „select id from artikel order by id desc;“; Variable, selektiert alle in umgekehrter reihenfolge
$r = mysql_query($sql, $conn); //schickt die query an den server und kriegt ein handle auf die ergebnisliste zurück
while ($row = mysql_fetch_row($r)) { //solange weiter reihen vorhanden…
$u++; //variable u = u + 1
$iid_sicher = $row[0]; //braucht man lustigerweise, weil er row[0] nicht speichern tut, bzw. man nach der schleife nicht mehr drauf zugriefen kann…fragt mich nicht warum…
if ($u==$n_number) { //n_numer = anzahl der gewünschten datensätze
$i_id=$row[0]; //wenn u, also der counter, so groß ist wie die gewünschte anzahl an artikeln, hat man die id…
break;
}
}

if (!$i_id) $i_id=$iid_sicher; //wenn es aber garnie soweit kommt, nimm einfach die letzte id…ist dann die id, bei der er startet

//und dann einfach mit einem sql-statement
**$sql = „select * from artikel where id>=$i_id“;

wie gesagt…es ist eine absolut unelegante lösung, nur was besseres ist mir wirklich nicht eingefallen, da wie gesagt, dass problem mit den dann doch nicht fortlaufenden laufnummer doch deppat is…
naja, so far…
vielleicht hilft das ja…

yours,
geoka

p.s.: aja, und der code ist halt in php, sollte aber net wirklich ein problem mit der portierbarkeit entstehen denk ich…

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]**

hi!

auf den hinweis hin, von irgendwem da hab ich sowas geschrieben, eh ganz einfach weil ichs nocheinmal gebraucht habe…super idee…

select id from artikel order by id desc limit 15;

mfg,
georg