2013-06-19 26 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