Выводим на главную страницу случайный товар

Статус
В этой теме нельзя размещать новые ответы.
Зачем такие сложности, проще и красивие так
AND categoryID In (20,21,22)
Ага, согласен. :)
Да и по сути, грузить будет дополнительно данный запрос, который будет выполняться при каждом обновлении страницы. Дополнительные параметры отбора, скажутся максимум процентов на 5-10%, и то врятли.
По той схеме, как я её себе представляю
PHP:
$q = db_query("SELECT productID, name, Price, default_picture FROM SS_products WHERE enabled=1 and categoryID IN (SELECT categoryID FROM SS_categories WHERE categoryID=$categoryID or parent=$categoryID) ORDER BY rand() LIMIT 0,3");
оно должно очень сильно грузить (если конечно таких разделов будет много), поэтому и рекомендую вручную прописывать. Ведь, oreder by rand() будет каждый раз запускать SELECT categoryID FROM SS_categories..., или я не прав?
 
у меня 2 ветки категорий: по типу товаров и бренды(таким образом я пытался "придумать" модуль бренды). например, ноутбук самсунг находится одновременно в 2х категориях: ноутбуки и самсунг. основная категория - ноутбуки, а самсунг - дополнительная. меня интересует могу ли я вывести произвольный товар самсунг? или же выборка возможна только из основных категорий?
 
Ага, согласен. :)
По той схеме, как я её себе представляю
PHP:
$q = db_query("SELECT productID, name, Price, default_picture FROM SS_products WHERE enabled=1 and categoryID IN (SELECT categoryID FROM SS_categories WHERE categoryID=$categoryID or parent=$categoryID) ORDER BY rand() LIMIT 0,3");
оно должно очень сильно грузить (если конечно таких разделов будет много), поэтому и рекомендую вручную прописывать. Ведь, oreder by rand() будет каждый раз запускать SELECT categoryID FROM SS_categories..., или я не прав?
По идее сначала выполняется подзапрос:
SELECT categoryID FROM SS_categories WHERE categoryID=$categoryID or parent=$categoryID

Далее, запросом выбираем 5 записей сформированные подзапросом отсортированных в случайном порядке. Другими словами, подзапрос выполниться один раз.


у меня 2 ветки категорий: по типу товаров и бренды(таким образом я пытался "придумать" модуль бренды). например, ноутбук самсунг находится одновременно в 2х категориях: ноутбуки и самсунг. основная категория - ноутбуки, а самсунг - дополнительная. меня интересует могу ли я вывести произвольный товар самсунг? или же выборка возможна только из основных категорий?
Как запрос построишь, а построить можно буквально любой запрос, так выводить и будет.

Добавлено через 11 минут
Хотя опять же, ORDER BY RAND() - типа краеугольного камня, при больших выборках БД может загнуться.

Как вариант, если ИД товаров у вас уникально и идут попорядку, можно скрипитом сгенерировать 5-10 рандомных чисел, потом их выбрать. Только ньюанс будет конечно с выбором из конкретных категорий.
Но для этого есть другой вариант, рандомность возложить не на СУБД а на ПХП (выбрать все записи в массив, а там случайным способ их дергать)

Есть вариант построения составного запроса, с объеденениями, с лимит ранд(),1

Но все эти извраты нужны при больших таблицах и слабых хостингах.
 
Хотя опять же, ORDER BY RAND() - типа краеугольного камня, при больших выборках БД может загнуться.
Как вариант, если ИД товаров у вас уникально и идут попорядку, можно скрипитом сгенерировать 5-10 рандомных чисел, потом их выбрать. Только ньюанс будет конечно с выбором из конкретных категорий.
Но для этого есть другой вариант, рандомность возложить не на СУБД а на ПХП (выбрать все записи в массив, а там случайным способ их дергать)
Есть вариант построения составного запроса, с объеденениями, с лимит ранд(),1
Но все эти извраты нужны при больших таблицах и слабых хостингах.
закешируйте выбранный массив на сутки или больше, и массив будет в пыхе(кеше), оттуда ранодомно выбирайте
 
закешируйте выбранный массив на сутки или больше, и массив будет в пыхе(кеше), оттуда ранодомно выбирайте
По уму так в обще в админку вставить в категории товаров, типа создать - очистить рандомный кэш товаров.

Только вот вопрос, при больших размерах массива где скорость будет выше. Как никрути, субд заточено под выборку и хеширование данных. А файловые операции, есть файловые операции.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху