powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Количество строк в подзапросе
8 сообщений из 8, страница 1 из 1
Количество строк в подзапросе
    #39394753
anuta123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте! Задача - выбрать заблокированных пользователей из таблицы, причем у разных пользователей может быть одинаковый емейл. Выбрать нужно только тех, у кого все копии емейла заблокированы (block=1). Например:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
+--------+---------------+-------+
| id     | email         | block |
+--------+---------------+-------+
| 547853 | user1@amd.net |     1 |
| 236073 | user1@amd.net |     1 |
| 126499 | user1@amd.net |     1 |
| 976314 |  user8@at.net |     1 |
+--------+---------------+-------+


эти двое должны попасть в выборку.

А эти двое нет:
Код: sql
1.
2.
3.
4.
5.
6.
7.
+--------+---------------+-------+
| id     | email         | block |
+--------+---------------+-------+
|  12568 |  user2@at.net |     1 |
| 239590 |  user2@at.net |     0 |
|  23353 | user4@еее.com |     0 |
+--------+---------------+-------+


Пыталась соорудить запрос по типу
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT id, email, block
FROM
  users AS u
WHERE
  (
    SELECT COUNT(DISTINCT(email))
    FROM users AS a
    WHERE u.email=a.email
    GROUP BY email,block
  )>1


но в ответ получаю "Subquery returns more than 1 row"... Помогите плз )
...
Рейтинг: 0 / 0
Количество строк в подзапросе
    #39394757
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
anuta123выбрать заблокированных пользователей из таблицы, причем у разных пользователей может быть одинаковый емейл.А чем идентифицируется пользователь, если не E-mail-ом?
...
Рейтинг: 0 / 0
Количество строк в подзапросе
    #39394762
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Формально
Код: sql
1.
2.
3.
4.
SELECT email
FROM `table`
GROUP BY email
HAVING COUNT(*) = SUM(block)


Однако Вы говорите о ПОЛЬЗОВАТЕЛЯХ (которые, если верить описанию, идентифицируются по id), а подсчитываете УНИКАЛЬНЫЕ EMAIL.
...
Рейтинг: 0 / 0
Количество строк в подзапросе
    #39394975
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
anuta123,
найдите уже программиста, чтобы писал вам запросы...
...
Рейтинг: 0 / 0
Количество строк в подзапросе
    #39395078
anuta123,

0) left self join anti
1) not exists подзпрос
2) как уже говорили - group by + having
3) not in подзапрос
...
Рейтинг: 0 / 0
Количество строк в подзапросе
    #39395302
anuta123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoftА чем идентифицируется пользователь, если не E-mail-ом?
Телефоном. Но это отдельная тема в сложном существующем проекте, и я вникаю лишь в то, что нужно сделать.

AkinaФормально
спасибо, то что нужно. Я вчера придумала другой:
Код: sql
1.
2.
3.
SELECT *, COUNT(*) num_emails, SUM(IF(`block`=1,1,0)) num_blocked
FROM `users`
WHERE 1 GROUP BY `email` HAVING num_emails=num_blocked


но ваш явно правильнее, да и работает быстрее
...
Рейтинг: 0 / 0
Количество строк в подзапросе
    #39395408
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
anuta123,

Можно еще чуть проще:
Код: sql
1.
2.
3.
4.
SELECT email
FROM `table`
GROUP BY email
HAVING MIN(block)=1



А писать SELECT * неправильно, т.к. в остальных полях, кроме email, будут значения из случайной записи в пределах каждой группы.
...
Рейтинг: 0 / 0
Количество строк в подзапросе
    #39395683
anuta123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoftanuta123,

Можно еще чуть проще:
Код: sql
1.
2.
3.
4.
SELECT email
FROM `table`
GROUP BY email
HAVING MIN(block)=1



А писать SELECT * неправильно, т.к. в остальных полях, кроме email, будут значения из случайной записи в пределах каждой группы.
да, я вчера долго не могла понять почему email и id не совпадают, потом дошло )))
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Количество строк в подзапросе
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]