我有一个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做同样的事情?
提前致谢。
答案 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_*
函数已弃用且不再维护,因此我认为是时候切换到PDO
或mysqli
并使用预处理语句来避免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