ФорумРазработкаБазы данных → Выборка n случайных товаров из категорий.

Выборка n случайных товаров из категорий.

  • armageddance

    Сообщения: 29 Репутация: N Группа: Кто попало

    Spritz Ноя. 3, 2011, 3:52 п.п.

    Есть таблица продуктов products, в ней товары имеют product_id и каждому товару соответствует категория category_id
    Помогите выбрать n (или менее) случайных товаров из категорий.
    Набросал SELECT * FROM products GROUP BY category_id, product_id, но тут запрос не учитывает ограничение в количестве n или менее.

    В поиске на сайте подобной темы не нашел.
    Благодарю заранее.
    Спустя 99 сек.
    Да, кстати, вложенность категорий можно не учитывать.
  • technobulka

    Сообщения: 4540 Репутация: N Группа: Джедаи

    Spritz Ноя. 3, 2011, 4:09 п.п., спустя 16 минут 29 секунд

    LLIMIT? оО
    Высокоуровневое абстрактное говно
  • armageddance

    Сообщения: 29 Репутация: N Группа: Кто попало

    Spritz Ноя. 3, 2011, 4:12 п.п., спустя 3 минуты 24 секунды


    LLIMIT? оО

    Нет, limit мне просто ограничит выборку в целом, а нужно ограничить выбираемое количество товаров из всех категорий.
    При n=4, например,
    выборка SELECT * FROM products GROUP BY category_id, product_id LIMIT n приведет к тому, что я получу из первой категории 4 товара и 0 из всех остальных.
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz Ноя. 3, 2011, 4:20 п.п., спустя 8 минут 20 секунд

    ORDER BY RAND() LIMIT 4
    что ли? или я толком не понял че надо …
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz Ноя. 3, 2011, 4:19 п.п., спустя 23 часа 58 минут 47 секунд

    на чистом скл задача эта не решается. тут надо в пару запросов в любом случае минимум делать. я с одним профи долго выдумывал алгоритмы как такое развернуть)) "по быстрому" чтобы работало ни одного нормальнго алгоритма не пришло в голову.
    Спустя 12 сек.
    если я правильно понял что ты хочешь :)
    Сапожник без сапог
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz Ноя. 3, 2011, 4:24 п.п., спустя 5 минут 10 секунд

    GROUP BY category_id, product_id - весьма странная группировка сама по себе, точнее говоря совершенно бессмысленная
  • armageddance

    Сообщения: 29 Репутация: N Группа: Кто попало

    Spritz Ноя. 3, 2011, 4:25 п.п., спустя 41 секунду


    ORDER BY RAND() LIMIT 4
    что ли? или я толком не понял че надо …

    Надо сделать так, чтобы запрос выдавал из каждой категории товаров одинаковое количество товаров, например, 4. Если в категории нет столько товаров, то тогда чтобы выдавалось меньшее товаров. Товары - рандомные.

    [/quo

    на чистом скл задача эта не решается. тут надо в пару запросов в любом случае минимум делать. я с одним профи долго выдумывал алгоритмы как такое развернуть)) "по быстрому" чтобы работало ни одного нормальнго алгоритма не пришло в голову.
    Спустя 12 сек.
    если я правильно понял что ты хочешь :)
    te]
    Ну а в пару запросов как задачу побороть?
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz Ноя. 3, 2011, 4:35 п.п., спустя 9 минут 55 секунд

    А база mysql? Тогда, как сказал дуд … сначала выбирать категории, и в цикле по каждой выбирать товары.
  • Givi

    Сообщения: 2284 Репутация: N Группа: Адекваты

    Spritz Ноя. 3, 2011, 9:39 п.п., спустя 5 часов 3 минуты 46 секунд

    Ага, а перед тем как это все делать не плохо было бы научится более четче формировать вопросы/задачи, а то выходит какия-то хуйня: нужно что-то совсем не то, о чем вопрос.
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz Ноя. 3, 2011, 11:54 п.п., спустя 2 часа 15 минут 18 секунд

    http://rmcreative.ru/blog/post/optimizatsija-order-by-rand
    Спустя 53 сек.
    естественно комменты тоже нужно читать в обязательном порядке
  • Ivan

    Сообщения: 1316 Репутация: N Группа: Адекваты

    Spritz Ноя. 4, 2011, 2:17 д.п., спустя 2 часа 22 минуты 50 секунд

    Можно псевдоранд сделать - через IN, ранд генерируешь скриптом, а ORDER BY RAND базу вешает даже при небольшой нагрузке.

Пожалуйста, авторизуйтесь, чтобы написать комментарий!