Ага, согласен.
По той схеме, как я её себе представляю
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
Но все эти извраты нужны при больших таблицах и слабых хостингах.