2011-01-02 2 views
0

После запроса моего last question Я думал, что проблема решена, и предоставленный ответ работал, когда я это пробовал.Странные результаты запроса для динамической навигации

Проблема в том, что навигационная система выбирает предыдущую и следующую строку в базе данных до тех пор, пока product_id не станет 100+, после чего она не удастся.

Вот код, я использую для создания ссылки:

$prevProduct = $prod - 3; 
$queryNextProductID = 'SELECT product_id FROM products WHERE product_id > '.$prod.' AND category='.$cat.' LIMIT 1'; 
$queryPrevProductID = 'SELECT product_id FROM products WHERE product_id < '.$prod.' AND category='.$cat.' LIMIT '.$prevProduct.',1'; 

$queryPrevProductID возвращает предыдущую строку в таблице до 100+, когда он возвращает пустой результирующий набор.

Heres упрощенный вариант моего стола, чтобы лучше объяснить вопрос:

product_id 
1 
3 
5 
80 
103 
104 

На странице product_id=3 предыдущая ссылка будет 1 и Следующая ссылка будет 5
На странице product_id=80 в Предыдущая ссылка будет 5, а Следующая ссылка будет 103
На странице product_id=103 Предыдущая ссылка не будет присутсвует, а Следующая ссылка будет 104

Любые идеи по проблеме?

ответ

1

Изменить запрос. Использование предела со смещением не требуется. Также вам нужно использовать «ORDER BY product_id» или следующий продукт и «ORDER BY product_id DESC» для предыдущего продукта.

$queryNextProductID = 'SELECT product_id FROM products WHERE product_id > '.$prod.' AND category='.$cat.' ORDER BY product_id LIMIT 1'; 
$queryPrevProductID = 'SELECT product_id FROM products WHERE product_id < '.$prod.' AND category='.$cat.' ORDER BY product_id DESC LIMIT 1'; 
+0

Кажется, мой предыдущий ответ был неправильным, попробуем это позже, когда у меня снова будет доступ к коду. – Daniel

0

Вы используете LIMIT так:

LIMIT '.$prevProduct.',1' 

Это будет врезался в

LIMIT 100,1 

не ограничивающая ваш результат установлен в 1 строку после строки, где 'product_id' = 100, но 1 строка после 100-й строки в результате.

Просто удалите код '.$prevProduct.' и используйте ORDER BY product_id, чтобы отсортировать результаты.

+0

Попытка позже, как получилось 'LIMIT 97,1' и т. Д. (Все ниже 100) отлично работает, тогда он терпит неудачу при 100+? – Daniel