Hanya satu ORDER BY
klausa dapat didefinisikan untuk UNION
akan bertanya. Tidak masalah jika Anda menggunakan UNION
atau UNION ALL
. MySQL mendukung LIMIT
klausa pada bagian dari UNION
'd query, tapi relatif tidak berguna tanpa kemampuan untuk menentukan urutan.
MySQL juga tidak memiliki fungsi peringkat, yang Anda perlukan untuk mengatasi kesenjangan dalam data (hilang karena entri dihapus). Satu-satunya alternatif adalah dengan menggunakan variabel incrementing dalam pernyataan SELECT:
SELECT t.id,
@rownum := @rownum+1 as rownum
FROM MEDIA t, (SELECT @rownum := 0) r
Sekarang kita bisa mendapatkan daftar baris yang diberi nomor urut, jadi kita bisa menggunakan:
WHERE rownum BETWEEN @midpoint - ROUND(@midpoint/2)
AND @midpoint - ROUND(@midpoint/2) [email protected]
Menggunakan 7 sebagai nilai untuk @midpoint, @midpoint - ROUND(@midpoint/2)
mengembalikan nilai 4
. Untuk mendapatkan total 10 baris, setel nilai @upperlimit ke 10. Berikut kueri lengkapnya:
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
Tetapi jika Anda masih ingin menggunakan LIMIT
, Anda dapat menggunakan:
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