Nur ein ORDER BY
-Klausel kann für eine UNION
definiert werden würde fragen. Es spielt keine Rolle, ob Sie UNION
verwenden oder UNION ALL
. MySQL unterstützt das LIMIT
-Klausel für Teile einer UNION
würde abfragen, aber es ist relativ nutzlos ohne die Fähigkeit, die Reihenfolge zu definieren.
MySQL fehlen auch Ranking-Funktionen, die Sie benötigen, um Lücken in den Daten zu schließen (fehlen aufgrund von gelöschten Einträgen). Die einzige Alternative besteht darin, eine inkrementierende Variable in der SELECT-Anweisung zu verwenden:
SELECT t.id,
@rownum := @rownum+1 as rownum
FROM MEDIA t, (SELECT @rownum := 0) r
Jetzt können wir eine fortlaufend nummerierte Liste der Zeilen erhalten, also können wir verwenden:
WHERE rownum BETWEEN @midpoint - ROUND(@midpoint/2)
AND @midpoint - ROUND(@midpoint/2) [email protected]
Verwenden Sie 7 als Wert für @midpoint, @midpoint - ROUND(@midpoint/2)
gibt einen Wert von 4
zurück . Um insgesamt 10 Zeilen zu erhalten, setzen Sie den @upperlimit-Wert auf 10. Hier ist die vollständige Abfrage:
SELECT x.*
FROM (SELECT t.id,
@rownum := @rownum+1 as rownum
FROM MEDIA t,
(SELECT @rownum := 0) r) x
WHERE x.rownum BETWEEN @midpoint - ROUND(@midpoint/2) AND @midpoint - ROUND(@midpoint/2) + @upperlimit
Aber wenn Sie trotzdem LIMIT
verwenden möchten , können Sie verwenden:
SELECT x.*
FROM (SELECT t.id,
@rownum := @rownum+1 as rownum
FROM MEDIA t,
(SELECT @rownum := 0) r) x
WHERE x.rownum >= @midpoint - ROUND(@midpoint/2)
ORDER BY x.id ASC
LIMIT 10