Berikut adalah cara lain untuk melakukannya menggunakan UNION
s. Saya pikir ini sedikit lebih mudah dipahami dan lebih fleksibel daripada jawaban yang diterima. Perhatikan bahwa contoh mengasumsikan id
bidang itu unik, yang tampaknya menjadi kasus berdasarkan pertanyaan Anda.
Kueri SQL di bawah ini mengasumsikan tabel Anda disebut demo
dan memiliki satu id
. yang unik bidang, dan tabel telah diisi dengan nilai yang Anda cantumkan dalam pertanyaan Anda.
( SELECT id FROM demo WHERE STRCMP ( 'd01', id ) > 0 ORDER BY id DESC LIMIT 1 )
UNION ( SELECT id FROM demo WHERE id = 'd01' ORDER BY id ) UNION
( SELECT id FROM demo WHERE STRCMP ( 'd01', id ) < 0 ORDER BY id ASC LIMIT 1 )
ORDER BY id
Ini menghasilkan hasil berikut:b03, d01, d02
.
Solusi ini fleksibel karena Anda dapat mengubah setiap LIMIT 1
pernyataan ke LIMIT N
dimana N
adalah nomor apapun. Dengan begitu Anda bisa mendapatkan 3 baris sebelumnya dan 6 baris berikutnya, misalnya.