2009-07-05 4 views
8

私はデータベースを持っており、単一のクエリを使用してID順に前後のレコードを探したいと思います。私は組合をやろうとしましたが、それはうまくいかないのです。 :(MySQLで単一のクエリを使用して前と次のレコードを見つける方法は?

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

任意のアイデア どうもありがとう

答えて

16

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

+1

あなたの答えをありがとう、私はここに列を書くために怠惰から*を追加しました、私はそれらに実際のコードに名前があります:) –

関連する問題