[MySQL] Limit aus Limit abfragen?

BartTheDevil89

Devilution Media
ID: 87739
L
2 Mai 2006
3.960
103
Hallo,

ich weiß, dass es recht schwierig klingt, aber ich versuchs mal gut zu beschreiben. Also ich habe diese Tabelle:

name/anzahl
-auto/444
-blume/3
-oma/333

Also jeweils ein Begriff und dazu passend eine anzahl.
Die bisherige Abfrage läuft so:

select * from table order by rand() LIMIT 40

Damit fragt er mir ja 40 zufällige Einträge ab.

Allerdings würde ich das gern so erweitern, dass er mir:

1. 200 Einträge ausgibt, die order by anzahl DESC sind. Also die 200 Einträge mit den höchsten Werten in anzahl.
2. jetzt soll er mir 40 aus diesen 200 Einträgen zufällig auswählen.

Kann man sowas auch in einer SQL-Abfrage tätigen?

Denn Ziel ist es Einträge mit geringer Anzahl eben auszuschließen.

Danke
 
Code:
SELECT *
FROM (SELECT * FROM table ORDER BY anzahl DESC LIMIT 200)
ORDER BY RAND()
LIMIT 40

Hey,

dankeschön. Also läuft nur über 2 seperate Abfragen im Prinzip, die eben hier jetzt in einem gemacht werden.
Wie schaut es überhaupt mit den Ladezeiten solcher Abfragen aus? Also die Abfrage wird immer auf der Startseite abgefragt, deswegen ist das eben interessant. Denn die Tabelle kann durchaus zig tausend Einträge, also 5- oder gar 6-stellig sein.
 
neija der desc-query arbeitet performant, der query aussenrum prinzipiell auch, aber nur im prinzip, denn order by rand() killt leistung ohne ende.
also optimaler kannste den query nicht mehr formulieren.

da ich deinen anwendungsfall nicht kenne kann ich dir auch keine empfehlungen geben, wie man das db-layout optimieren kann, auf jedenfall sollten die ergebnisse aber gecacht werden
 
da ich deinen anwendungsfall nicht kenne kann ich dir auch keine empfehlungen geben, wie man das db-layout optimieren kann, auf jedenfall sollten die ergebnisse aber gecacht werden

Hi und zwar gehts darum für eine tagcloud zufällig 40 begriffe aus der DB zu laden. Und da bei der derzeiten Variante eben auch viele drin sind, die nur 1x oder so abgefragt wurden (also anzahl = 1) haben, wollte ich eben ne Lösung finden, nur die häufig gefragten dafür zu verwenden.
 
neija bei deiner anforderung lässt sich nicht viel mehr verbessern, bis auf vllt alle einträge die die anforderung erfüllen in eine extra tabelle zu packen und diese in php zu cachen und dann direkt in php das random zu machn.