MySQL запрос - выберите отличное значение, где оно имеет определенные значения, сгруппировать по - PullRequest
0 голосов
/ 10 июля 2010

У меня сейчас есть

SELECT * FROM bidders 
WHERE status='0' 
AND email IS NOT NULL 
GROUP BY `bid_user` 
ORDER BY 'bid_price' DESC

Проблема, с которой я столкнулся, заключается в том, что bid_user может существовать в разных строках с различным статусом (status = 1 или status = 0).Я хотел бы знать, возможно ли выбрать только * строки, где status = 0 и где bid_user не существует с status = 1 вместе с вышеуказанными условиями (И электронная почта НЕ НУЛЬ ГРУППА BY bid_user ORDER BY'bid_price' DESC).Я могу обойти эту проблему, используя PHP + 2 запроса mysql, но было бы намного лучше иметь точный запрос в mysql.

Ответы [ 3 ]

3 голосов
/ 10 июля 2010

Как вы хотите * строки с status='0' И email IS NOT NULL не используйте GROUP BY

SELECT * FROM bidders 
WHERE status='0' 
AND email IS NOT NULL 
ORDER BY 'bid_price' DESC

отредактировано (согласно комментарию @Michael)

Данные

id  bid_price  bid_user status
1   100        test      0
2   200        test      1
3   300        test2     0

Требуется O / P

id  bid_price  bid_user status
3   300        test2      0

SQL-запрос

   SELECT * FROM bidders 
     WHERE bid_user NOT IN (select DISTINCT `bid_user` FROM `bidders` where status='1') 
       AND email IS NOT NULL 
     ORDER BY 'bid_price' DESC
0 голосов
/ 11 июля 2010

Альтернатива, которая, вероятно, будет работать лучше, если у вас есть индексы bid_user и status:

SELECT 
  b.* 
FROM 
  bidders b
WHERE 
  status='0' 
  AND email IS NOT NULL 
  AND not exists (
    select 1 from bidders bx where bx.status='1' and bx.bid_user = b.bid_user
  )
ORDER BY 'bid_price' DESC
0 голосов
/ 10 июля 2010

Вы можете сделать это, заменив условие "status = '0'" на "status = '0' ИЛИ ​​(status = '1' И bid_user IS NULL)"

...