[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Вывод относительно заданной строки
Shurick
Добрый день!
Необходим запрос для вывода аналогичных товаров по определенной релевантности относительно заданной строки.
Допустим существует 10 сток. Мы находимся в товаре 5. Необходимо вывести 3 товара с права относительно данного товара и 3 с лева. При этом должна быть возможность сортировать их по заданному значению (по цене, имени, бренду и т.п.)

Товар1
*Товар2
*Товар3
*Товар4
Товар5
*Товар6
*Товар7
*Товар8
Товар9
Товар10

Все на что хватило моей фантазии это вот это

 SELECT x.*
FROM
(SELECT p.`id`,p.`product_title`,p.`catalog_id`,@rownum := @rownum + 1 AS rownum FROM `shop_price` p, (SELECT @rownum := 0) r WHERE p.`catalog_id`='8' ORDER by p.`product_title`) x,
(
SELECT i.* FROM (SELECT p.id,@rownum := @rownum + 1 AS rownum FROM `shop_price` p, (SELECT @rownum := 0) r WHERE p.`catalog_id`='8' ORDER by p.`product_title`) i WHERE i.id='5') i
WHERE (x.rownum > i.rownum and x.rownum < i.rownum+3) or (x.rownum < i.rownum and x.rownum > i.rownum-3)



Если в категории 8 будет 2 000 товаров как это отобразится на скорости загрузки. А если таких запросов будет 2 или 3? Как по моему очень плохо.

Есть ли другие варианты?



Спустя 1 час, 27 минут, 12 секунд (27.02.2012 - 12:37) Placido написал(а):
Не понятно, 3 товара справа и 3 слева по какому критерию? По имени, по цене, по id, по времени добавления? Плюс хотелось бы взглянуть на структуру таблицы.
Если по id и упрощенно, то такой вариант:
(SELECT * FROM `shop_price` WHERE `catalog_id`>= 8 ORDER BY `catalog_id` LIMIT 4) 
UNION
(SELECT * FROM `shop_price` WHERE `catalog_id`<= 8 ORDER BY `catalog_id` DESC LIMIT 4)
ORDER BY `product_title`;

Спустя 1 час, 26 минут, 14 секунд (27.02.2012 - 14:03) Shurick написал(а):
Цитата (Placido @ 27.02.2012 - 09:37)
Не понятно, 3 товара справа и 3 слева по какому критерию? По имени, по цене, по id, по времени добавления? Плюс хотелось бы взглянуть на структуру таблицы.
Если по id и упрощенно, то такой вариант:
(SELECT * FROM `shop_price` WHERE `catalog_id`>= 8 ORDER BY `catalog_id` LIMIT 4) 
UNION
(SELECT * FROM `shop_price` WHERE `catalog_id`<= 8 ORDER BY `catalog_id` DESC LIMIT 4)
ORDER BY `product_title`;

Запрос должен быть универсальным и по цене и по дате заполнения и если необходимо по названию.

Допустим вы сортируете на странице http://merleon.ru/catalog/kettles/ товары в нужной вам релевантности. Такая же релевантность должна сохраняться в блоке "Далее Электрочайники" на странице http://merleon.ru/catalog/products/402/.

Цель - реализовать обход всех товаров - предыдущий, следующий в той релевантности которую выбрал пользователь.


_____________
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.