|
|
|
| Есть две таблицы, в failed_phones 22 тыс. строк, в afm_phones больше 8 млн.
Поля - failed_phones.phone и afm_phones.phone, afm_phones.afm.
Надо выбрать все afm_phones.phone, у которых совпадают afm_phones.afm, которые соответствуют failed_phones.phone.
Надо таблицу afm_phones джойнить на саму себя? Пробовала так, ругается на GROUP_CONCAT
(подозреваю, что можно проще)
SELECT
afm_phones.phone, afm_phones.afm
GROUP_CONCAT(
afm_phones.phone
SEPARATOR ',') AS params
FROM
afm_phones
LEFT JOIN failed_phones
ON failed_phones.phone = afm_phones.phone
GROUP BY
failed_phones.phone;
|
В выборке желательно получить все данные, т.е. и phone из failed_phones и afm и phone из afm_phones. Поле phone везде уникальный индекс. | |
|
|
|
|
|
|
|
для: elenaki
(17.03.2016 в 13:30)
| | запятая перед GROUP_CONCAT куда делась?
Если phone в atm_phohes уникально, назначение GROUP_CONCAT (и тем более сепаратора запятой) неясно вообще. Там же набору значений неоткуда будет взяться, и группировка как таковая смысла не несет.
Поле atm ни в одном условии не фигурирует, хотя по описанию - вроде бы должно. | |
|
|
|
|
|
|
|
для: Trianon
(18.03.2016 в 12:05)
| | У phone - уникальные значения в обеих таблицах. Но phone из таблицы failed_phones может найтись в таблице afm_phones (скорее всего найдется). Если нашелся, то надо найти второе поле той же записи - afm - в таблице afm_phones. И потом найти все остальные записи в таблице afm_phones с этим же afm. afm - это ИНН. У каждого afm в таблице afm_phones может быть от одного до трехсот телефонов (если это фирма, чаще - два, три, пять). Мне нужно найти телефоны, соoтветствующие afm, один телефон которого уже попал в failed_phones.
PS поставила запятую, сервер задумался. Надо было сначала EXPLAIN написать... | |
|
|
|
|
|
|
|
для: elenaki
(18.03.2016 в 13:27)
| | Ограничила вывод 10 значениями. Вывело ерунду. Понятно, что так нельзя - если телефонов много, они не влезут в строку. И они все одинаковые почему-то...
2100037839 | NULL
2100672489 | NULL
2102010845 | 2102010845,2102010845
2102011143 | 2102011143,2102011143
2102011625 | 2102011625
2102012168 | 2102012168,2102012168
2102012575 | 2102012575
2102012942 | 2102012942,2102012942
2102012979 | 2102012979
2102013486 | 2102013486,2102013486,2102013486
|
| |
|
|
|
|
|
|
|
для: elenaki
(18.03.2016 в 13:27)
| | Понял. Сейчас попробую что-то подобное нарисовать
SELECT fp.phone, ap.atm, GROUP_CONCAT(bp.phone SEPAARATOR ',' ) phl
FROM failed_phones fp
LEFT JOIN atm_phones ap ON fp.phone = ap.phone
LEFT JOIN atm_phones bp ON bp.atm = ap.atm
GROUP BY fp.phone, ap.atm
|
| |
|
|
|
|
|
|
|
для: Trianon
(18.03.2016 в 18:53)
| | Не. Не получается. Наверно, сделаю двумя запросами.
1. Найду afm плохих телефонов, их всего 33255.
2. Найду в цикле все остальные телефоны по найденным afm.
Все равно мне их надо вывести как csv, вот и выведу в цикле. | |
|
|
|
|
|
|
|
для: elenaki
(22.03.2016 в 12:23)
| | Может тогда лучше эти самые atm в отдельную таблицу положить сперва (на первом шаге) пусть даже и временную?
Все ж таки триста тысяч запросов - не жук чихнул... | |
|
|
|
|
|
|
|
для: Trianon
(22.03.2016 в 13:57)
| | Я их положу в csv и буду счиитывать постепенно. | |
|
|
|
|
|
|
|
для: elenaki
(22.03.2016 в 17:52)
| | ..и с каждой считанной строки формировать SQL-запрос о телефонах.
А можно было бы положить в таблицу, и сопряженные телефоны после этого получить одним запросом.
Уж коль скоро не выходит взять инфу двойным join'ом
Не выходит, если я правильно понимаю, из-за отсутствия индексов по полю atm
Кстати, для построчного чтения необязательно (хотя и весьма удобно) гонять group_concat .
Можно без группировки, одной сортировкой вытянуть те же данные. | |
|
|
|
|
|
|
|
для: Trianon
(22.03.2016 в 19:50)
| | Я заполнила поле never_call у тех записей таблицы afm_phones, где есть плохой телефон из таблицы failed_phones.
Теперь выборка должна делаться из одной таблицы - afm_phones.
afm | phone | active | never_call
Все поля - индексы. Кроме того есть уникальный индекс afm+phone.
Надо выбрать все телефоны с одинаковым afm, если один из этих телефонов имеет 1 в поле never_call.
Ушла думать. | |
|
|
|