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) example@sqldat.com
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