2009-10-03 6 views
3

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

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

ответ

2

Не очень приятно, но я думаю, что это лучшее, что вы можете сделать в 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, но также может возвращать несколько продуктов из той же категории)

+0

Спасибо! Это работает отлично - вы были правы в отношении предыдущего, он возвратил несколько продуктов от данного кота. – Katherine

Смежные вопросы