2009-02-27 12 views
1

テーブルの次の行を取得するにはどうすればよいですか?現在のIDから前の行と次の行を取得する

`image_id` int(11) NOT NULL auto_increment 
`image_title` varchar(255) NOT NULL 
`image_text` mediumtext NOT NULL 
`image_date` datetime NOT NULL 
`image_filename` varchar(255) NOT NULL 

現在の画像は、例えば3であり、次のものが7などである場合、これは動作しません。

$query = mysql_query("SELECT * FROM images WHERE image_id = ".intval($_GET['id'])); 
echo $_GET['id']+1; 

私はどのようにすればいいの?

ありがとうございました

答えて

2

あなたは非常に近いです。あなたがレコードを一周したい場合は、この使用することができ

$query = mysql_query("SELECT * FROM images 
        WHERE image_id > ".intval($_GET['id'])." ORDER BY image_id LIMIT 1"); 

    <?php echo $_GET['id'] ?> 
+0

子供たちは、家ではしないでください。これは[SQLインジェクション](https://en.wikipedia.org/wiki/SQL_injection)を叫ぶ。 PDO、および/またはパラメータ化されたクエリを使用します。 – sleske

11
SELECT * FROM images WHERE image_id < 3 ORDER BY image_id DESC LIMIT 1 -- Previous 
SELECT * FROM images WHERE image_id > 3 ORDER BY image_id LIMIT 1 -- Next 
4

:UNIONと同じ

-- previous or last, if there is no previous 
SELECT * 
FROM images 
WHERE image_id < 12345 OR image_id = MAX(image_id) 
ORDER BY image_id DESC 
LIMIT 1 

-- next or first, if there is no next 
SELECT * 
FROM images 
WHERE image_id > 12345 OR image_id = MIN(image_id) 
ORDER BY image_id ASC 
LIMIT 1 

を、さらに効率的であるかもしれない:

これを試してみてください
-- previous or last, if there is no previous 
(SELECT * FROM images WHERE image_id < 12345 ORDER BY image_id DESC LIMIT 1) 
UNION (SELECT * FROM images WHERE image_id = (SELECT MAX(image_id) FROM images)) 
LIMIT 1 

-- next or first, if there is no next 
(SELECT * FROM images WHERE image_id > 12345 ORDER BY image_id ASC LIMIT 1) 
UNION (SELECT * FROM images WHERE image_id = (SELECT MIN(image_id) FROM images)) 
LIMIT 1 
+0

あなたの答えは本当にクールです。そして、テーブルイメージの大文字小文字はもう1つのフィールド: 'image_type'を持っていますか? image_type = $ img_typeの次/前と前/後を選択します。 next/firstまたはprevious/lastは特定のimage_type($ img_type)のものであり、すべてのimage_typeのものではありません。 –

+0

@AJOP既存の 'WHERE'条件をカッコで囲み、' AND'で条件を追加します。 – Gumbo

+0

Where節でMAXとMIN()関数を使用することはできないと思いますが、その理由はわかりません。 –

0

インターネットの愛のために、あなた自身のSQLクエリ。 PDOを使用してください。

+5

StackOverflowの愛のために、この種の回答は書かないでください。コメントを使用します。 –

関連する問題