Выборка предыдущего и следующего товара (при сортировке по имени)

igor_ua

Новичок
Выборка предыдущего и следующего товара (при сортировке по имени)

Здравствуйте, скажите пожалуйста,

Пусть есть табличка с товарами, с полями:
ID | SORT | NAME
1 | 100 | Test 1
2 | 100 | Test 2
Нужно сделать при просмотре одного из товаров переход к следующему и предыдущему товару.
Причем товары должны идти в том же порядке, что и при просмотре списком. А при просмотре списком
они отсортированы по 2м полям: 1) по полю SORT, 2) по названию (поле NAME)

Если бы сортировка была по ID, который уникален, тогда все просто, а по имени.... если имена одинаковы?
Если у нас будет например 100 элементов у которых будут одинаковы и поля сорт и названия? мы же не сможем 2мя выборками получить пред. и след. элементы??

Это вообще решаемая задача? Или нет?

Спасибо
 

igor_ua

Новичок
Вот на примере такой таблички. Это часть, названия то одинаковые, но вот др. св-ва у товаров разные.

В таком порядке, например выводятся товары в списке. Сортировка по SORT, NAME, ID (т.е. обычный вывод списка с сортировкой по названию)
ID SORT NAME
1 100 Автоцистерна
3 100 Автоцистерна <--- 1) пример 1. получим соседей этого элемента
6 100 Автоцистерна <--- 2) пример 2. получим соседей этого элемента
0 100 Бочка
8 100 Вода
2 100 Газель
4 100 Газель
5 100 Камаз
Пример 1
Выбираем предыдущий элемент
SELECT * FROM `example` WHERE NAME<="Автоцистерна" AND ID<3 ORDER BY SORT ASC, NAME DESC, ID DESC LIMIT 1;
Результат
ID SORT NAME
1 100 Автоцистерна
Выбираем следующий элемент
SELECT * FROM `example` WHERE NAME>="Автоцистерна" AND ID>3 ORDER BY SORT ASC, NAME ASC, ID ASC LIMIT 1;
Результат
ID SORT NAME
6 100 Автоцистерна
Вроде бы пока все правильно.

Но в примере 2
Выбираем предыдущий элемент
SELECT * FROM `example` WHERE NAME<="Автоцистерна" AND ID<6 ORDER BY SORT ASC, NAME DESC, ID DESC LIMIT 1;
Результат
ID SORT NAME
3 100 Автоцистерна
Выбираем следующий элемент
SELECT * FROM `example` WHERE NAME>="Автоцистерна" AND ID>6 ORDER BY SORT ASC, NAME ASC, ID ASC LIMIT 1;
Результат
ID SORT NAME
8 100 Вода

Пропустили
0 100 Бочка
Вот видимо я где-то не так что-то понимаю....
Если в WHERE не добавлять условие по ID, то при одинаковых именах, не будет понятно для какого элемента получать соседей. А добавив условие по ID не сможем получить соседей в некоторых случаях.....

В общем запутался.....

Спасибо!
 

igor_ua

Новичок
Спасибо!
Вот только все это на битрикс :( и там такой логики через АПИ не реализовать.....
 
Сверху