SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 06.11.2018 13:04:44

Vela
Участник
Зарегистрирован: 06.11.2018
Сообщений: 4

Выборка из большой таблицы

Здравствуйте.
Накопилась большая база с подписчиками за многие годы, надо ее почистить. Штатный экспорт в csv с такой базой (1606786 строк) не справляется. В MySQL я совсем слаб, а руководство требует sad

Нудно создать запрос, который выведет из `COPY_submits` данные находящиеся в element_value при условии, что form_id=7. Выводить нужно только если element_label имеет
значение 2, 4, 12. Причем, если одно из значений отсутствует, то выводить "пустоту".

В идеале, конечно, получить вывод в одну строку такого типа:
Артем ; почта@mail.ru ; Russia

https://clip2net.com/clip/m463625/86e61-clip-222kb.png

Заранее благодарен за помощь

Неактивен

 

#2 06.11.2018 19:32:01

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5827

Re: Выборка из большой таблицы

если я правильно понял, то

select group_concat(element_value order by element_label separator ';') from `COPY_submits` where form_id=7 and element_label in (2,4,12) group by group_id;

Неактивен

 

#3 06.11.2018 20:22:05

Vela
Участник
Зарегистрирован: 06.11.2018
Сообщений: 4

Re: Выборка из большой таблицы

vasya написал:

если я правильно понял, то

select group_concat(element_value order by element_label separator ';') from `COPY_submits` where form_id=7 and element_label in (2,4,12) group by group_id;

Спасибо, практически идеально. Огромное спасибо!

Только в результате запроса поля местами поменялись:
Russia;Irina;email@mail.ru
Т.е. не Имя, Почта, Страна
а Страна, Имя, Почта
Странно это, но не критично, исправлю в экселе.

Еще момент, после запроса делаю экспорт в csv и в файле получаю вот такие строки
"Russia;Irina;email@mail.ru"
При попытке открыть csv в экселе вся строка попадает в одну общую ячейку, а не разделяется на три.

Неактивен

 

#4 06.11.2018 21:53:35

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5827

Re: Выборка из большой таблицы

Vela написал:

Только в результате запроса поля местами поменялись:
Russia;Irina;email@mail.ru
Т.е. не Имя, Почта, Страна
а Страна, Имя, Почта
Странно это, но не критично, исправлю в экселе.

element_label это строка или число?
попробуйте в запросе указать
order by element_label desc
или
order by element_label+0

Vela написал:

Еще момент, после запроса делаю экспорт в csv и в файле получаю вот такие строки
"Russia;Irina;email@mail.ru"
При попытке открыть csv в экселе вся строка попадает в одну общую ячейку, а не разделяется на три.

про эксель не подскажу
а зачем он нужен?
что подразумевается под "почистить"? какой результат вы хотите получить в конечном счете?

Неактивен

 

#5 06.11.2018 23:03:45

Vela
Участник
Зарегистрирован: 06.11.2018
Сообщений: 4

Re: Выборка из большой таблицы

vasya, еще раз спасибо за помощь!

vasya написал:

element_label это строка или число?
попробуйте в запросе указать
order by element_label desc
или
order by element_label+0

element_label это номер поля в форме подписки.
Обязательно проверю эти варианты. Только скажите, в какое место запроса их добавить?


vasya написал:

про эксель не подскажу
а зачем он нужен?
что подразумевается под "почистить"? какой результат вы хотите получить в конечном счете?

результат имя, е-майл, страна
дело в том, что в подписку надобавлялись спамеры из Африки и многих других стран, они нам не нужны. Поэтому и чистим базу.
Это не проблема, в экселе я поправлю.

Выловил еще большую проблему при варианте запроса из Вашего первого поста.
Некоторая часть строк выглядят так:
Cameroon;United States;Cameroon;Becky;Jo;Sue;Vixenunderfire45@gmail.com;jmp5587yt@gmail.com;Chacopruchelb@gmail.com
т.е. не 3 значения: имя; почта; страна
а  несколько значений через ;

Я так понимаю, что это из-за одного из незаполненных полей из element_label (со значениями 2, 4, 12)?

Можно ли как то, в случае, если одно из значений (2,4,12) element_label  не заполнено, вставлять туда "пробел"?

Простите за мой нубизм sad

Отредактированно Vela (06.11.2018 23:06:33)

Неактивен

 

#6 06.11.2018 23:25:15

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5827

Re: Выборка из большой таблицы

Vela написал:

Только скажите, в какое место запроса их добавить?

select group_concat(element_value order by element_label+0 separator ';') from `COPY_submits` where form_id=7 and element_label in (2,4,12) group by group_id;
 


Vela написал:

дело в том, что в подписку надобавлялись спамеры из Африки и многих других стран, они нам не нужны. Поэтому и чистим базу.

Т.е. вы хотите удалить часть строк из базы? А зачем переводить в эксель? Это можно сделать непосредственно в MySQL.


Vela написал:

Выловил еще большую проблему при варианте запроса из Вашего первого поста.
Некоторая часть строк выглядят так:
Cameroon;United States;Cameroon;Becky;Jo;Sue;Vixenunderfire45@gmail.com;jmp5587yt@gmail.com;Chacopruchelb@gmail.com
т.е. не 3 значения: имя; почта; страна
а  несколько значений через ;

Я так понимаю, что это из-за одного из незаполненных полей из element_label (со значениями 2, 4, 12)?

Проверьте:
у всех этих строк одинаковый group_id
или
в element_value через ; перечислены по нескольку значений

Неактивен

 

#7 06.11.2018 23:35:25

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5827

Re: Выборка из большой таблицы

Vela написал:

Можно ли как то, в случае, если одно из значений (2,4,12) element_label  не заполнено, вставлять туда "пробел"?

что значит "не заполнено"?
в element_value пустое значение
или
отсутствует строка с нужным element_label

Неактивен

 

#8 07.11.2018 00:02:25

Vela
Участник
Зарегистрирован: 06.11.2018
Сообщений: 4

Re: Выборка из большой таблицы

vasya написал:

Т.е. вы хотите удалить часть строк из базы? А зачем переводить в эксель? Это можно сделать непосредственно в MySQL.

Честно говоря, я думал будет проще сделать запрос в базе, чтобы отсеять лишнее, а оставшееся в экселе просто сортировкой удалить и редактировать, т.к. в MySQL слаб. Да, вы правы, в MySQL это сделать проще, но опять таки, я в нем не силен.
Таблица сложновата для меня, я работал с намного более простыми таблицами.
Например, как оставить только тех, кто из Украины, Белоруссии, Казахстана, Литвы и пр, но удалить тех, кто из многочисленных стран африки...
Или как оставить только тех, кто из России.


vasya написал:

что значит "не заполнено"?
в element_value пустое значение
или
отсутствует строка с нужным element_label

Оба случая. Есть element_value с пустым значением и есть отсутствующие element_label. Т.е., к примеру, если element_label равный значению 12 не заполнен, то для этого пользователя его в таблице может не быть.

Неактивен

 

#9 07.11.2018 01:45:55

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5827

Re: Выборка из большой таблицы

Vela написал:

Или как оставить только тех, кто из России.

а как определяются те кто из России?
логично предположить, что это те у кого element_label =12 и element_value='Russia'
но ведь у вас может быть пустое значение для element_value или вообще отсутствовать строка с element_label = 12
тогда каковы критерии?


можно пойти другим путем и удалять тех у кого явно указана страна отличная от нужной:


delete from `COPY_submits` where group_id not in(select * from(
SELECT group_id FROM `COPY_submits` where form_id=7 and element_label=12 and (element_value is null or element_value in('','росиия','белоруссия',и т.д.))
union all
select t1.group_id from
(select distinct group_id from `COPY_submits` where form_id=7) t1
left join
(select group_id from `COPY_submits` where form_id=7 and element_label=12) t2
on t1.group_id=t2.group_id where t2.group_id is null) t3)
 

p.s. не забывайте про бэкап и производите сначала удаление на копии таблицы

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson