MySQL: выберите отдельное поле, но получите и остальные столбцы? - PullRequest
1 голос
/ 24 декабря 2009

Я хочу выбрать разные product_series, но я хочу и все остальные столбцы.

Это мой запрос в его нынешнем виде:

SELECT DISTINCT product_series 
FROM cart_product 
WHERE product_brand = "everlon" 
AND product_type = "ring" 
AND product_available = "yes"

Это только дает мне product_series, мне также нужны все остальные столбцы в этой строке. Если я пытаюсь выбрать больше, чем просто product_series, я получаю несколько серий продуктов.

Я хочу, чтобы это были * все поля, но я хочу ограничить его, чтобы получить только 1 строку для каждой серии продуктов.

Я не уверен, правильно ли я объясняю это, поэтому позвольте мне привести пример:

если у меня есть

product_series   product_id
----------------------------
"seriesA"        230
"seriesA"        231
"seriesB"        232
"seriesB"        233

Я бы получил все столбцы, но только 1 на каждую серию product_series:

product_series   product_id
----------------------------
"seriesA"        230
"seriesB"        232

Как я могу это сделать?

Ответы [ 3 ]

4 голосов
/ 24 декабря 2009
SELECT  pi.*
FROM    (
        SELECT  DISTINCT product_series 
        FROM    cart_product 
        ) pd
JOIN    cart_product  pi
ON      pi.id =
        (
        SELECT  id
        FROM    cart_product po
        WHERE   product_brand = "everlon" 
                AND product_type = "ring" 
                AND product_available = "yes"
                AND po.product_series = pd.product_series
        LIMIT 1
        )

Это выберет один продукт для каждой серии в произвольном порядке.

Добавьте условие ORDER BY в подзапрос, чтобы определить порядок.

Вы также можете прочитать эту статью в моем блоге:

3 голосов
/ 24 декабря 2009

Вы можете использовать GROUP BY для этого. Но, пожалуйста, поймите, что должен быть какой-то способ «сплющивания» группы из нескольких product_id в одно значение Это достигается с помощью агрегатной функции, такой как MIN, MAX или GROUP_CONCAT ():

SELECT product_series, MAX(product_id) max_product_id
FROM cart_product 
WHERE product_brand = 'everlon'
AND product_type = 'ring'
AND product_available = 'yes'
GROUP BY product_series

Кстати: пожалуйста, не используйте двойные кавычки в SQL для разделения строк. Во всех СУБД, кроме MySQL, двойная кавычка может использоваться для разграничения идентификаторов, и только одинарные кавычки могут использоваться для разграничения строковых литералов.

1 голос
/ 24 декабря 2009

Звучит так, как будто вы хотите GROUP BY.

...