2013-06-19 2 views
1

У меня есть таблица 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"); 

Так в коде у меня есть текущий идентификатор, улучшенный идентификатор и подчиненная идентификатор.

Проблема заключается в том, что если текущий id = 1 и единственный существующий идентификатор после 1 равен 4, то Высший идентификатор будет равен «1» + 1 вместо 4, который является единственным существующим идентификатором после 1. То же самое относится, если Я сделал это с более низким.

Есть ли способ выбрать 4 вместо 2 и сделать то же самое с нижним идентификатором?

Заранее спасибо.

ответ

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?

+0

Благодарим вас за советы. Он просто необходим для добавления LIMIT 1, поэтому он не будет выбрасывать все значения, превышающие текущий идентификатор. – Joscplan

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

Использование сильфона запроса, вы можете получить р 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 
Смежные вопросы