Поиск страницы, на которой окажется товар при постраничном выводе

sverel

Новичок
Интересная практическая задачка-головоломка.

Есть интернет магазин в котором товары разбиты на категории. URL='catalog/52' - юзер попадает в группу с номером 52 и просматривает товары в ней. Отдельной страницы для каждого товара нет. Но в каждой группе есть постраничная навигация URL='catalog/52?page=2' - попадает на вторую страницу.

Проблема заключается в поиске по каталогу. Когда юзер в результатах поиска кликает по какой-то позиции он попадает на страницу "catalog/52?goTo=199" (аналог "catalog/52#good199" но используется навороченый JS-скролл к позиции 199). Но на этой странице товара с таким ID может и не оказаться т.к. он находится на второй странице. Проблема усугубляется тем, что товары сортируются по названию производителя и имени (ORDER BY `developer` ASC, `name` ASC). Из-за такого порядка сортировки я не могу определить на какой странице внутри группы находится мой товар! И не могу послать юзера на правильную страницу.

Как сделано на других сайтах:

1. Есть отдельная страница для каждого товара. Соответственно пользователь попадает на неё. Но у меня такой страницы нет и делать её нельзя.

2. На форумах когда вы кликаете "перейти к не прочитанному сообщению" (URL="/showthread.php?goto=199&topic=52") программа ищет кол-во записей стоящих до 199-ой:
SELECT COUNT(*) FROM `tbl` WHERE `cat`=52 AND `id` < 199;
Т.е. фактически, получает порядковый номер записи и далее зная кол-во на одной странице вычисляет номер страницы. Но мне такой вариант не подходит потому, что товары сортируются по названиям производителей и по собственным названиям (ORDER BY `developer` ASC, `name` ASC). Из-за этого я не могу написать фильтр WHERE `cat`=52 AND `developer` < 'тиккурила' AND `name` < 'Краска Беталюкс красная' // не правильный фильтр.


Есть ещё вариант: выцепить список правильно отсортированных всех наименований в категории и далее циклом пройтись по всей пачке в поисках интересующей записи - таким образом получить порядковый номер записи. Но этот способ какой-то высоко-систему-нагружалистый-и-выполняющий-бесчисленное-колво-лишних-действий.

Есть какие-нибудь идеи?
P.S.> http://resurection.ru/alget/catalog/51?goTo=199 - правильно работает т.к. товар на первой странице.
http://resurection.ru/alget/catalog/45?goTo=804 - а этот нет, т.к. товар находится на третьей странице.

-~{}~ 19.03.09 13:56:

Решение пришло из космоса:

PHP:
WHERE
`cat_id` = 52 AND
(
   `developer` < 'Тиккурила' OR  
   (
         `developer` = 'Тиккурила' AND 
         `name` < 'Краска в/д Тиккурила Евро 7 матовая (А) 18л'
   )
)
 
Сверху