2013-06-19 28 views
1

我有一个mysql表,我希望根据当前选定值的ID获取劣等(即上一个)或上级(即下一个)项目。基于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"); 

所以在代码中,我有电流id,高级ID,伪劣ID。

这里的问题是,如果当前id = 1并且1之后的唯一现有id是4,那么Superior ID将是'1'+ 1而不是4,这是1之后唯一的现有id。我做了一个劣质的。

有没有办法选择4而不是2,并做同样的低级ID?

在此先感谢。

回答

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?

+0

感谢您的建议,它只是需要添加限制1,所以它不会抛出所有的值大于当前的ID。 – Joscplan

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

使用波纹管查询,你可以才能计算p rev和下一个。该查询的结果将返回两行。第一个是前一个,另一个是下一个。

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