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) [email protected]
@ 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