Sql 从当前id获取上一行和下一行

Sql 从当前id获取上一行和下一行,sql,mysql,Sql,Mysql,我如何才能得到表中的下一行 `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("SE

我如何才能得到表中的下一行

`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;
我该怎么办


谢谢

你很接近了。试试这个:

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

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

你很接近。试试这个:

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

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

如果要圈出记录,可以使用以下方法:

-- 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
与UNION一样,UNION可能更高效:

-- 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

如果要圈出记录,可以使用以下方法:

-- 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
与UNION一样,UNION可能更高效:

-- 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

出于对互联网的热爱,请不要自己构建SQL查询。使用。

出于对互联网的热爱,请不要自己构建SQL查询。使用。

您的答案非常酷,表image的情况下还有一个字段:“image\u type”。我想选择下一个/第一个和上一个/最后一个图像类型=$img\u类型。请注意,“下一个/第一个”或“上一个/最后一个”用于特定的图像类型$img\U类型,而不是所有图像类型。@A请将现有的WHERE条件用括号括起来,并将您的条件与and一起添加到其中。我想我不能在WHERE子句中使用MAX和MIN函数,但我不知道为什么?您的答案非常酷,表image还有一个字段:'image\u type'。我想选择下一个/第一个和上一个/最后一个图像类型=$img\u类型。请注意,“下一个/第一个”或“上一个/最后一个”用于特定的图像类型$img\U类型,而不是所有图像类型。@请将现有的WHERE条件用括号括起来,并将您的条件与and一起添加到其中。我想我不能在WHERE子句中使用MAX和MIN函数,但我不知道为什么?出于对StackOverflow的热爱,请不要写这种答案。使用评论。出于对StackOverflow的热爱,请不要写这种答案。使用评论。孩子们,请不要在家里这样做。这让人尖叫。使用PDO、and或参数化查询。孩子们,请不要在家里这样做。这让人尖叫。使用PDO、and或参数化查询。