2015-01-08 5 views
-1

Я бегу застрял в запросе MySQL, который не делает то, что я хочу. Из списка изображений продукта мне нужно получить номер с самым низким номером order. Я использую запрос ниже, чтобы сделать это:MySQL HAVING MIN() не возвращает минимальное значение

SELECT id FROM media 
WHERE media.productgroup_id = 102 
AND media.product_id= 902 
AND media.type = 0 
HAVING MIN(media.order) 

База данных таблицы media содержит:

id | productgroup_id | product_id | order | type 
47215 | 102    | 902  | 2  | 0 
47216 | 102    | 902  | 1  | 0 
47217 | 102    | 902  | 3  | 0 

Запуск выше запрос возвращает мне идентификатор 47215, где я ожидал 47216. Таким образом, он возвращает минимальный id, а не минимальный порядок.

Какую ошибку я могу сделать?

+1

Ваш запрос не имеет никакого смысла, так как вы используете групповую функцию без группировки там –

+3

Вы пропускаете 'группы by' и условие сравнения результата' MIN (media.order) 'к чему-то (например, 'с MIN (media.order) = 10'). Каждая другая СУБД просто отклонит ваш запрос. –

+0

@a_horse_with_no_name MySQL - это PHP RDBMS, позволяющий вам делать странные вещи :-) – Jcl

ответ

3

Приказ order и принять первый элемент

SELECT id 
FROM media 
WHERE media.productgroup_id = 102 
AND media.product_id= 902 
AND media.type = 0 
order by media.order asc 
limit 1 

having используется для групп, которые вы не строили.

+0

Я бы сказал, это то, что мне нужно! Как это просто! – Timo002

1

Если ваши критерии были более сложными, чем просто мин, вы также можете использовать подзапрос, чтобы решить эту проблему. Это, как говорится, ответ @ jeurgen-d, вероятно, более быстрый для вашей ситуации. Я просто хочу указать, что есть более чем один способ обмануть этого кота.

SELECT id 
FROM media 
    INNER JOIN (
     SELECT min(id) 
     FROM media 
     WHERE 
      media.productgroup_id = 102 
      AND media.product_id= 902 
      AND media.type = 0 
    ) as m2 
    ON media.id = m2.id