Выберите случайные строки, но без дубликатов значений из одного столбца - PullRequest
3 голосов
/ 03 октября 2009

Это простой выбор из одной таблицы. Цель состоит в том, чтобы выбрать четыре случайных продукта, по одному из каждой из x категорий, с парой ограничений «где». Я пробовал это:

  SELECT pName, 
         pID 
    from products 
   WHERE pDisplay=1 
     AND pFeatured=1 
GROUP BY pCategory 
ORDER BY RAND() 
   LIMIT 0,4

Этот вид работает, но он всегда возвращает один и тот же продукт из любой данной категории. Я хочу изменить показанные продукты, но пока показываю только один продукт для любой категории.

Я тоже пробовал:

  SELECT DISTINCT(pCategory) 
         pName, 
         pID 
    from products 
   WHERE pDisplay=1 
     AND pFeatured=1 
ORDER BY RAND() 
   LIMIT 0,4

Я думаю, что может потребоваться два выбора - первый, чтобы получить случайные 4 категории, второй, чтобы выбрать случайный ряд из каждого из них, но a. Я не уверен, как это сделать, и б. предпочел бы использовать один запрос, если это возможно.

1 Ответ

2 голосов
/ 03 октября 2009

Не очень приятно, но я думаю, что это лучшее, что вы можете сделать в MySQL.

SELECT p.pID, p.pName
   FROM (
       SELECT (
           SELECT pID FROM products
           WHERE pCategory=p.pCategory AND pDisplay=1 AND pFeatured=1
           ORDER BY rand() LIMIT 1
           ) AS pID
       FROM products p
       WHERE pDisplay=1 AND pFeatured=1
       GROUP BY pCategory
       ORDER BY rand() LIMIT 4
       ) c
   JOIN products p ON c.pID = p.pID

(запрос karim79 может возвращать несколько продуктов из одной категории, возможно, даже продукты с pDisplay = 0 или pFeatured = 0. Запрос rexem обрабатывает проблему pDisplay / pFeatures, но также может возвращать несколько продуктов из одной категории)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...