根据ID选择上一行或下一行

时间:2013-06-19 23:54:10

标签: php mysql

我有一个mysql表,我希望根据当前所选值的ID获取下级(即上一个)或上级(即下一个)项。

像这样:

$id_ani = $cap['id_ani']; //Current id
$id_capnex = $cap['id_cap']+1; //Superior id
$nexcap = mysql_query("SELECT * FROM m_table WHERE id_cap=$id_capnex");
$id_caprev =  $cap['id_cap']-1; //Inferior id
$prevcap = mysql_query("SELECT * FROM m_table WHERE id_cap=$id_caprev");

所以在代码中我有Current id,Superior id和Inferior id。

这里的问题是,如果当前id = 1且1之后唯一存在的id为4,则高级id将为'1'+ 1而不是4,这是1之后唯一存在的id。如果我同样适用做得比较差。

有没有办法选择4而不是2,并对劣质id做同样的事情?

提前致谢。

2 个答案:

答案 0 :(得分:1)

尝试使用大于>或小于<

$id_capnex = $cap['id_cap']+1; //Superior id
$nexcap = mysql_query("SELECT * FROM m_table WHERE id_cap=$id_capnex");
$id_caprev =  $cap['id_cap'];
$prevcap = mysql_query("SELECT * FROM m_table WHERE id_cap<$id_caprev orber by id_cap ASC");
//inferior
$prevcap = mysql_query("SELECT * FROM m_table WHERE id_cap>$id_caprev orber by id_cap ASC");
//superior

另外注意我添加了mysql_*函数已弃用且不再维护,因此我认为是时候切换到PDOmysqli并使用预处理语句来避免mysql injections的任何风险,请在此处了解详情How can I prevent SQL injection in PHP?

答案 1 :(得分:0)

$limit_id=$cap['id_cap']+2

使用bellow Query,您可以获得上一个和下一个。此查询的结果将返回两行。第一个是先前的,另一个是下一个。

SELECT * , IF( id >$cap['id_cap'], 1, 0 ) AS NextFlag, IF( id <$cap['id_cap'], 1, 0 ) AS PrevFlag FROM m_table 
WHERE id_cap <$limit_id
HAVING NextFlag =1
OR PrevFlag =1
ORDER BY id_cap DESC
LIMIT 2