10

データベースがあり、単一のクエリを使用して、ID順に並べられた前と次のレコードを検索したいと思います。ユニオンをしようとしましたが、うまくいきません。:(

SELECT * FROM table WHERE `id` > 1556 LIMIT 1
UNION 
SELECT * FROM table WHERE `id` <1556 ORDER BY `product_id` LIMIT 1

何か案は?どうもありがとう。

4

1 に答える 1

17

あなたはあなたの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ステートメントで列に名前を付けてください。

于 2009-07-05T16:38:35.500 に答える