ORDER BYは1つだけ UNIONに対して句を定義できます 'dクエリ。 UNIONを使用するかどうかは関係ありません またはUNION ALL 。 MySQLはLIMITをサポートしています UNIONの一部の句 クエリを実行しますが、順序を定義する機能がないと比較的役に立ちません。
MySQLには、データのギャップ(エントリが削除されたために欠落している)に対処する必要があるランキング関数もありません。唯一の代替手段は、SELECTステートメントで増分変数を使用することです。
SELECT t.id,
@rownum := @rownum+1 as rownum
FROM MEDIA t, (SELECT @rownum := 0) r
これで、連続した番号の行のリストを取得できるため、次を使用できます。
WHERE rownum BETWEEN @midpoint - ROUND(@midpoint/2)
AND @midpoint - ROUND(@midpoint/2) example@sqldat.com
@ midpoint、@midpoint - ROUND(@midpoint/2)の値として7を使用 4の値を返します 。合計10行を取得するには、@upperlimit値を10に設定します。完全なクエリは次のとおりです。
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
ただし、それでもLIMITを使用する場合 、次を使用できます:
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