2013-11-21 3 views
0

У меня есть такой запрос:MySQL проблема с HAVING

SELECT price FROM orders WHERE user_id = 10 HAVING count(*) > 1

Это работает, но всегда возвращает только один ряд. Что я делаю не так?

+0

Отсчет функция (*) всегда будет возвращать только 1 запись. Просто подумай об этом. – elvenbyte

+0

Не могли бы вы сообщить нам, чего вы хотите достичь, используя этот запрос? – Roopendra

+0

Этот запрос на самом деле не имеет смысла, объяснение вашей конечной цели было бы очень полезно. –

ответ

0
SELECT 
o.price, 
o.user_id 
FROM orders o 
INNER JOIN(
SELECT 
user_id 
FROM orders 
WHERE 
user_id = 10 
GROUP BY user_id 
HAVING count(*) > 1 
) subQ 
ON subQ.user_id = o.user_id 
+0

Да, это он. Именно то, что мне нужно! Благодаря тонну! ;) – artnikpro

+1

Конечно, проблем нет. В будущем попробуйте уточнить свои цели немного больше, это поможет вам получить ответ намного быстрее. –

+0

Я буду. Обещание;) – artnikpro

0

Поскольку HAVING пункт работа с GROUP BY см description здесь

Как упоминается в комментариях: -

Мне нужно, чтобы получить все заказы (цены), что конкретный пользователь сделал

Вам не нужно использовать HAVING, вы можете просто так:

SELECT price FROM orders WHERE user_id = 10 
+0

Благодарим за быстрый ответ. Я добавил GROUP BY, но ничего не изменил. Одна и та же единая цена, но есть две из них. 'SELECT price FROM orders WHERE user_id = 10 GROUP BY user_id HAVING count (*)> 1'. Какие-либо предложения? – artnikpro

+0

Мне нужно получить заказы пользователя только в том случае, если он совершил более одной покупки – artnikpro

+0

Если вы сохраняете дату заказа в своем дБ, тогда вы можете заказать по дате поля. – Roopendra

0

HAVING является дополнением к GROUP BY. Он не может использоваться сам по себе. Документация here

0

Вы можете использовать имеющие без каких-либо данных, группировка, например:

SELECT price FROM orders WHERE user_id = 10 HAVING price > 10 

Но если использовать сгруппированные данные, как кол, сумма и т.д., вы должны добавить group by:

SELECT sum(price) FROM orders WHERE user_id = 1 group by user_id HAVING count(*) > 1; 
+0

'цена> 10' или' сумма (цена) 'не то, что мне нужно.Просто нужно получить все цены в столбце, поэтому я могу получить массив из них – artnikpro

0

Показаны только записи, в которых определенный идентификатор появляется несколько раз (от This Thread

SELECT * FROM table WHERE ID IN (SELECT ID FROM table GROUP BY ID HAVING COUNT(*) > 1) 

В вашем случае вы хотели бы показать цены на заказы определенного идентификатора. Сначала мы выбираем user_id и ограничиваем условие «множественной покупки». Затем мы вводим это в обычный запрос

SELECT prices FROM orders 
WHERE user_id = 10 
AND user_id IN 
     (SELECT user_id FROM orders GROUP BY user_id HAVING COUNT(*) > 1); 

Это должно работать

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