データベースがあり、単一のクエリを使用して、ID順に並べられた前と次のレコードを検索したいと思います。ユニオンをしようとしましたが、うまくいきません。:(
SELECT * FROM table WHERE `id` > 1556 LIMIT 1
UNION
SELECT * FROM table WHERE `id` <1556 ORDER BY `product_id` LIMIT 1
何か案は?どうもありがとう。
データベースがあり、単一のクエリを使用して、ID順に並べられた前と次のレコードを検索したいと思います。ユニオンをしようとしましたが、うまくいきません。:(
SELECT * FROM table WHERE `id` > 1556 LIMIT 1
UNION
SELECT * FROM table WHERE `id` <1556 ORDER BY `product_id` LIMIT 1
何か案は?どうもありがとう。
あなたはあなたのORDER BY
:を変更する必要があります
SELECT * FROM table WHERE `id` > 1556 ORDER BY `id` ASC LIMIT 1
UNION
SELECT * FROM table WHERE `id` < 1556 ORDER BY `id` DESC LIMIT 1
これによりid
、最上位の結果を取得する前に、フィールドが正しい順序になっていることが保証されます。
MINとMAXを使用することもできます。
SELECT
*
FROM
table
WHERE
id = (SELECT MIN(id) FROM table where id > 1556)
OR id = (SELECT MAX(id) FROM table where id < 1556)
SELECT *
ただし、本番コードに含めることはお勧めしません。そのため、SELECT
ステートメントで列に名前を付けてください。