powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / GROUP_CONTACT и NOT IN
7 сообщений из 7, страница 1 из 1
GROUP_CONTACT и NOT IN
    #38346438
tweaker7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!
Пытаюсь сгруппировать список id в следующем коде:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
...
DECLARE Operators VARCHAR(150);
...
SELECT IFNULL(GROUP_CONCAT(`users_operators_excluded`.`operator_id`),0) INTO Operators FROM `users_operators_excluded` WHERE `users_operators_excluded`.`user_id`=userID;
...
INSERT INTO `stats` (`list_id`,`status_id`,`phone`)
	SELECT listID, 0, `st_t`.`phone` FROM `stats_tmp` `st_t`
		LEFT JOIN `phones_info` `pi`
		ON `pi`.`phone` = `st_t`.`phone`
		WHERE `st_t`.`list_id`=listID AND `st_t`.`phone` NOT IN(
			SELECT `phone` FROM `blacklist`
			WHERE `phone`=`st_t`.`phone`)
		AND `pi`.`operator_id` NOT IN (Operators);
...


В этоге если в таблице users_operators_excluded есть строчки 5,1 исключается только 5 а 1 нет айди.
Как можно что то сделать?
...
Рейтинг: 0 / 0
GROUP_CONTACT и NOT IN
    #38346442
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tweaker7,

зачем тут переменная ?
почему не просто так

Код: sql
1.
2.
3.
...
AND `pi`.`operator_id` NOT IN 
(SELECT `users_operators_excluded`.`operator_id` FROM `users_operators_excluded` WHERE `users_operators_excluded`.`user_id`=userID);


?
...
Рейтинг: 0 / 0
GROUP_CONTACT и NOT IN
    #38346444
tweaker7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwerty112tweaker7,

зачем тут переменная ?
почему не просто так

Код: sql
1.
2.
3.
...
AND `pi`.`operator_id` NOT IN 
(SELECT `users_operators_excluded`.`operator_id` FROM `users_operators_excluded` WHERE `users_operators_excluded`.`user_id`=userID);


?
Просто не охота лишние запросы делать, так как возможно что в одном селекте "SELECT listID, 0, `st_t`.`phone` FROM `stats_tmp` `st_t`" может возвращать 500 000 записей.
...
Рейтинг: 0 / 0
GROUP_CONTACT и NOT IN
    #38346456
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tweaker7Просто не охота лишние запросы делать, так как возможно что в одном селекте "SELECT listID, 0, `st_t`.`phone` FROM `stats_tmp` `st_t`" может возвращать 500 000 записей.
какие "лишние запросы" ??
1
IN / NOT IN - "работает" с множеством,
2
множество можно получить запросом SELECT или задать как перечисление значений
3
это '1,2,3,100500' - НЕ множество значений, это ОДИН текстовый литерал, - одно значение
4
всё !

зы
кстати, это твоё условие AND `pi`.`operator_id` NOT IN ( ... - делает из LEFT JOIN-а INNER JOIN
...
Рейтинг: 0 / 0
GROUP_CONTACT и NOT IN
    #38346461
tweaker7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
какие "лишние запросы" ??
У меня же выборка идет из `stats_tmp` , в нем на каждый `st_t`.`phone` будет идти еще выборка для NOT IN или я ошибаюсь?
IN / NOT IN - "работает" с множеством,
множество можно получить запросом SELECT или задать как перечисление значений
Про это можно поподробнее на моем примере?
это '1,2,3,100500' - НЕ множество значений, это ОДИН текстовый литерал, - одно значение

это я уже понял.
...
Рейтинг: 0 / 0
GROUP_CONTACT и NOT IN
    #38346480
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tweaker7какие "лишние запросы" ??
У меня же выборка идет из `stats_tmp` , в нем на каждый `st_t`.`phone` будет идти еще выборка для NOT IN или я ошибаюсь?

прикол в том, что ты не ошибаешся :))
даже если убрать эту корр.связь, которую ты "непойми зачем" сделал
вот эту
Код: sql
1.
2.
3.
NOT IN(
			SELECT `phone` FROM `blacklist`
			WHERE `phone`=`st_t`.`phone`)


всё равно - "на каждый `st_t`.`phone` будет идти еще выборка для NOT IN"

только так "задумано" - не было, это баг - 14604783 , 14604917

а что бы этого не было, нужно переделать запрос на JOIN-ы вместо IN
типа этого, что-то
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SELECT listID, 0, `st_t`.`phone` FROM `stats_tmp` `st_t`
LEFT JOIN `phones_info` `pi`
  ON `pi`.`phone` = `st_t`.`phone`
left join `blacklist`
  on `blacklist`.`phone`=`st_t`.`phone`
left join `users_operators_excluded`
  on `pi`.`operator_id`=`users_operators_excluded`.`operator_id` and `users_operators_excluded`.`user_id`=userID

WHERE `st_t`.`list_id`=listID 
AND `blacklist`.`phone` is null
AND `users_operators_excluded`.`operator_id` is null
AND `pi`.`operator_id` is null /* ??? это условие, имхо, - "левое". добавил только что бы соблюсти первый LEFT JOIN, который, наверняка не нужен */
...
Рейтинг: 0 / 0
GROUP_CONTACT и NOT IN
    #38346482
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
нее, посл.условие не нужно

fix
qwerty112
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SELECT listID, 0, `st_t`.`phone` FROM `stats_tmp` `st_t`
LEFT JOIN `phones_info` `pi`
  ON `pi`.`phone` = `st_t`.`phone`
left join `blacklist`
  on `blacklist`.`phone`=`st_t`.`phone`
left join `users_operators_excluded`
  on `pi`.`operator_id`=`users_operators_excluded`.`operator_id` and `users_operators_excluded`.`user_id`=userID

WHERE `st_t`.`list_id`=listID 
AND `blacklist`.`phone` is null
AND `users_operators_excluded`.`operator_id` is null
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / GROUP_CONTACT и NOT IN
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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