MySQL ўсе радкі, якія толькі адпавядаюць значэння поля

EDITED

Мне трэба, каб выканаць запыт, які толькі прыносіць мне user_id , якія ўсе свае тэлефоны <�б> пацвердзіў = 2 , а не толькі адзін ці два, павінны быць усё з іх.

Мая табліца выглядае наступным чынам:

 id      user_id    phone        confirmed
 ------- --------   -----------  ---
 1       1          3051234561   1
 1       1          3051234562   0
 1       1          3051234563   2
 1       2          3051234564   2
 1       2          3051234565   2
 1       2          3051234566   2
 1       3          3051234567   0
 1       3          3051234568   1
 1       4          3051234569   1

<�Б> У гэтым выпадку неабходна вярнуць user_id 2

Я спрабаваў зрабіць гэта з GROUP HAVING, але Iam не атрымліваючы вынік мне трэба. прыклад:

SELECT
*
FROM
    phones
GROUP BY 
    user_id
HAVING 
    MAX(confirmed) = 2
1
Калі імя слупка ідэнтыфікатар , гэта, верагодна, добрая ідэя (для лёгкачытэльнасць чалавекам), каб мець унікальныя значэння там, не ўсе 1 с.
дададзена аўтар Christopher Creutzig, крыніца
<�Код> SELECT выразны user_id ад тэлефонаў GROUP BY user_id HAVING сумы (пацверджана) = 0
дададзена аўтар Strik3r, крыніца
Яна ёсць, я толькі забыўся змяніць яго, друкуючы яго!
дададзена аўтар Galfau, крыніца
Strik3r шкада, што я меў памылку на пытанне, я рэдагаваў яго ўжо!
дададзена аўтар Galfau, крыніца

7 адказы

паспрабуйце гэта

SELECT distinct user_id FROM phones GROUP BY user_id HAVING sum(confirmed) = 2 * count(confirmed)

гэта дасць усе user_id, не пацверджаныя тэлефона

2
дададзена
Чытаць адказ зноў я змяніць яго, мне трэба ўсё, што ёсць усе іх тэлефоны пацверджаны = 2
дададзена аўтар Galfau, крыніца

Паспрабуйце гэты запыт -

SELECT
 user_id
FROM
  phones
GROUP BY 
  user_id
HAVING 
  COUNT(IF(confirmed = 2, 1, NULL)) = COUNT(*)

выхад:

+---------+
| user_id |
+---------+
|       2 |
+---------+
1
дададзена
Тэст - адзін COUNT (КАЛІ (пацверджана = 0 або = пацверджаны 2, 1, NULL)) = COUNT (*)
дададзена аўтар Devart, крыніца
Дзякуючы вам вельмі шмат!
дададзена аўтар Galfau, крыніца
Як наконт пацверджана = 0 і пацверджана = 2, але не пацверджана = 1
дададзена аўтар Galfau, крыніца
Я HAVING COUNT (IF (b.confirmed! = 1, 1, NULL)) = COUNT (*), але, што ўключае ў сябе ўсё, што ёсць усе тэлефоны пацверджаны = 2, але тое, што мне трэба зараз, што пацвердзілі = 0 АЛЕ аленевая скура ёсць пацвярджаецца = 1
дададзена аўтар Galfau, крыніца

Паспрабуйце наступныя адзін ....

   "SELECT * FROM phones WHERE confirmed='0' GROUP BY user_id"
0
дададзена

Выбіраць розныя user_id ад тэлефонаў GROUP BY user_id HAVING сумы (пацверджана) = 0

Вы пісалі:

SELECT
*
FROM
    phones
GROUP BY 
    user_id
HAVING 
    MAX(confirmed) = 2

Зараз вам трэба ўсё пацвердзілі, што 0, атрымліваючы іх сума павінна быць роўная нуля, і вы хочаце, не ўсе атрыбуты, але user_id:

SELECT
    distinct(user_id)
FROM
    phones
GROUP BY 
    user_id
HAVING 
    SUM(confirmed) = 0
0
дададзена

Вы можаце паспрабаваць, як гэта

SELECT user_id FROM phones WHERE confirmed=0 GROUP BY user_id;
0
дададзена

You need a WHERE condition before your GROUP BY

0
дададзена

паспрабуйце гэта

SELECT *
FROM phones
Where confirmed= 0
GROUP BY user_id
0
дададзена