jetzt musst du mir nochmal verraten was du möchtest - ich verstehe dich so, dass es diese "4 Kategorien" von Treffern gibt, die du mit einer gewissen Priorität selektieren möchtest. Über alle Treffer möchtest du eine Sortierung laufen lassen? Oder innerhalb der Gruppen? Am Ende sollen es maximal 100 Treffer werden?!
Was hindert dich daran, das LIMIT mit in die SELECTs zu setzen, du weißt, dass am Ende maximal 100 Treffer übrig bleiben, im Worst Case liefert also ein einzelnes Subselect alle 100 Treffer. Na gut, dann lass halt jedes Subselect selbst auch mit LIMIT 100 arbeiten. Das Ergebnis der 4 Unions sind dann maximal 400 Treffer, nach deinen Wünschen sortiert, von denen du dann per LIMIT 100 die ersten 100 herausgreifst.
(SELECT .. FROM .. ORDER BY ..LIMIT 100)
UNION
...
LIMIT 100
Hallo Rouven,
das kann ich machen, habe jedoch im Falle einer Seitennavigation ein gefälschtes Ergebnis. Das Limit müsste aus den einzelnen Selects raus und nur am Ende stehen.
dass es diese "4 Kategorien" von Treffern gibt, die du mit einer gewissen Priorität selektieren möchtest.
- ja
Über alle Treffer möchtest du eine Sortierung laufen lassen?
- nein
Oder innerhalb der Gruppen?
- ja
Am Ende sollen es maximal 100 Treffer werden?!
- nicht unbedingt. Ich möchtte eigentlich alle Treffer und diese Menge durch ein Limit beschränken.
Du hattest mit diesen Ansatz gegeben:
(2) künstliches Einbringen einer Sortierspalte
SELECT id,
top,
color,
type,
CASE
WHEN (top != 0 AND color = 0 AND status='expert') THEN 1
WHEN (top=0 AND color!=0 AND status = 'expert') THEN 2
...
END AS sortierung
FROM tabelle
ORDER BY sortierung
Gruß,
gondor(..)