mysql, erst LIMIT dann ORDER BY

robitobi

Mitglied
Hallo,
geht obiges?

Bei mir klappt immer nur:
SELECT... FROM ... WHERE ... ORDER BY ...LIMIT offset, anzahl:
Ich würde aber gerne (für eine Blätterfunktion) zuerst die Anzahl DS auswählen und dann sortieren (RAND()).
Bekomme ich aber nicht hin, deshalb meine Frage: Geht das überhaupt?
Auch die Suche und der Kofler haben mir bisher nicht geholfen.:(

Kann wer helfen?
Danke und Gruss
Dirk
 
Hmhm... hab ich noch net ausprobierst, aber wenn du nen Count auf der ID durchfürhst, könntest du doch z.b. dann nur die ersten 30 Einträge anzeigen lassen, dann die nächsten 30 auf der nächsten Seite.

Ich glaub im PHP Forum gibt's ne Lösung dafür, such mal in dem Bereich.


MfG Radhad
 
Hi,
aber wenn du nen Count auf der ID durchfürhst, .
das blick ich nicht, was du damit meinst.
Die z.B. 30 Datensätze hab ich ja, ich würde sie nur gerne ordnen.
Oder soll ich die query irgendwie ohne Limit machen, sondern mit count?
Bitte noch einen Tipp.
 
Nein geht nicht
Reihenfolge von
WHERE ... ORDER BY ... LIMIT
ist fest vorgegeben

Mal eine Frage am Rande warum möchtest du nur eine begrenzte Anzahl der Datenensätze durcheinander würfeln?
 
Das müsste mit einem Subselect so gehen:
PHP:
SELCT * FROM (SELECT... FROM ... WHERE ... LIMIT offset, anzahl) ORDER BY ...
Du erstellst so erst eine neue, begrenzte Tabelle und sortierst diese dann. :)
 
Hi,
Mal eine Frage am Rande warum möchtest du nur eine begrenzte Anzahl der Datenensätze durcheinander würfeln?
mal sehen ob ichs erklären kann.(Seite ist noch nicht fertig zum anschauen)
Ich habe eine Produkt-Übersicht mit z.B.5 Reihen a 5 Bilder je Seite.
Unter den jeweils 25 Bildern sind immer einige Werbe/Info-Bilder.(Banner).
Die möchte ich nun nicht so gerne immer stur an der gleichen Stelle haben, sondern mit den Produktbildern in der Reihenfolge mischen.
Deshalb würde ich gerne die LIMIT perpage-Anahl Datensätze nach Zufall ordnen.
Na, ob das einer versteht?
Gruss und Danke für Info.
Vielleicht fällt mir ja noch was ein.
 
Also,
meine Versuche mit SubSelect sind fehlgeschlagen, und nach allem, was ich hier gelesen habe kennt die Version von MySQL, die mir der Hoster anbietet (3xxx), auch keine Subs.
Trotzdem Danke.
Dann gehts eben nicht, es gibt Schlimmeres!:)
 
Hi robitobi,
die fehlende SubSelect-Funktionalität kann man in MySQL mit temporären Tabellen umschiffen. Ist etwas umständlich, geht aber gut und mit HEAP-Tabellen isses auch nicht mal sooo viel langsamer. Das gienge dann in etwas so:
Code:
// Sicherheitshalber, falls durch irgendwelche Unannehmlichkeiten übriggeblieben:
DROP TABLE IF EXISTS tmp_tabelle

// 30 ausgewählte Datensätze in temporäre Tabelle schreiben:
CREATE TEMPORARY TABLE tmp_tabelle TYPE=HEAP SELECT ... FROM ... LIMIT 30,...

// Die 30 Sätze durcheinanderwirbeln:
SELECT * FROM tmp_tabelle ORDER BY RAND()

// Ausgabe:
...
...

// Temporäre Tabelle löschen:
DROP TABLE IF EXISTS tmp_tabelle
Ich denke, das ist der gängige Workaround für sowas. Ansonsten: Warten auf's Production-Release von MySQL 4.1...

Grüße,
Martin

PS:
Das sind natürlich jetzt 4 Datenbank-Aktionen. Eigentlich könnte man das vielleicht etwas performanter gestalten, wenn man die 30 Ergebnisdatensätze in einfach in PHP in ein Array liest und das dann vor der Ausgabe in Unordnung bringt.
 
Zuletzt bearbeitet:
Zurück