Задавайте вопросы, мы ответим
Вы не зашли.
Здравствуйте.
Накопилась большая база с подписчиками за многие годы, надо ее почистить. Штатный экспорт в csv с такой базой (1606786 строк) не справляется. В MySQL я совсем слаб, а руководство требует
Нудно создать запрос, который выведет из `COPY_submits` данные находящиеся в element_value при условии, что form_id=7. Выводить нужно только если element_label имеет
значение 2, 4, 12. Причем, если одно из значений отсутствует, то выводить "пустоту".
В идеале, конечно, получить вывод в одну строку такого типа:
Артем ; почта@mail.ru ; Russia
Заранее благодарен за помощь
Неактивен
если я правильно понял, то
Неактивен
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 в экселе вся строка попадает в одну общую ячейку, а не разделяется на три.
Неактивен
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 в экселе вся строка попадает в одну общую ячейку, а не разделяется на три.
про эксель не подскажу
а зачем он нужен?
что подразумевается под "почистить"? какой результат вы хотите получить в конечном счете?
Неактивен
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 не заполнено, вставлять туда "пробел"?
Простите за мой нубизм
Отредактированно Vela (06.11.2018 23:06:33)
Неактивен
Vela написал:
Только скажите, в какое место запроса их добавить?
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 через ; перечислены по нескольку значений
Неактивен
Vela написал:
Можно ли как то, в случае, если одно из значений (2,4,12) element_label не заполнено, вставлять туда "пробел"?
что значит "не заполнено"?
в element_value пустое значение
или
отсутствует строка с нужным element_label
Неактивен
vasya написал:
Т.е. вы хотите удалить часть строк из базы? А зачем переводить в эксель? Это можно сделать непосредственно в MySQL.
Честно говоря, я думал будет проще сделать запрос в базе, чтобы отсеять лишнее, а оставшееся в экселе просто сортировкой удалить и редактировать, т.к. в MySQL слаб. Да, вы правы, в MySQL это сделать проще, но опять таки, я в нем не силен.
Таблица сложновата для меня, я работал с намного более простыми таблицами.
Например, как оставить только тех, кто из Украины, Белоруссии, Казахстана, Литвы и пр, но удалить тех, кто из многочисленных стран африки...
Или как оставить только тех, кто из России.
vasya написал:
что значит "не заполнено"?
в element_value пустое значение
или
отсутствует строка с нужным element_label
Оба случая. Есть element_value с пустым значением и есть отсутствующие element_label. Т.е., к примеру, если element_label равный значению 12 не заполнен, то для этого пользователя его в таблице может не быть.
Неактивен
Vela написал:
Или как оставить только тех, кто из России.
а как определяются те кто из России?
логично предположить, что это те у кого element_label =12 и element_value='Russia'
но ведь у вас может быть пустое значение для element_value или вообще отсутствовать строка с element_label = 12
тогда каковы критерии?
можно пойти другим путем и удалять тех у кого явно указана страна отличная от нужной:
Неактивен