Нужно сниппетом удалить из списка несоответствия

backoff

Client
Регистрация
20.04.2015
Сообщения
5 925
Благодарностей
6 389
Баллы
113
Хай, есть задача, с которой зенка в стандартных кубиках не справляется, или тратит на это неприлично много времени.

Есть большая база данных, нужно из этой базы удалить все строки не соответствующие условию.
Не знаю поможет ли сниппет в этом, база очень большая, делить на части ее еще тот гемор.

В зенке удаляю такой регуляркой
Код:
(условие1|условие2|условие3|условие4)
ну и все виснет в принципе :-) ну не виснет, просто работает ну очень долго, что просто не дожидаюсь и закрываю принудительно.

поможет ли сниппет в этом случае?
 

inotoxic

Client
Регистрация
20.04.2015
Сообщения
354
Благодарностей
162
Баллы
43
У вас в примере четыре условия
Удаляйте отдельными запросами к БД - условия в цикл
 

backoff

Client
Регистрация
20.04.2015
Сообщения
5 925
Благодарностей
6 389
Баллы
113
так не прокатит, удалив по одному условию, удалятся остальные 3
пытался вытащить по одному условию в отдельный список, но там тоже "зависания"
 
  • Спасибо
Реакции: TIIGR и Gulid

inotoxic

Client
Регистрация
20.04.2015
Сообщения
354
Благодарностей
162
Баллы
43
Чет какая-то логика не понятная
Если как вы говорите
удалив по одному условию, удалятся остальные 3
получится, что база - обработана
Возможно не правильно условие составлено?
 

backoff

Client
Регистрация
20.04.2015
Сообщения
5 925
Благодарностей
6 389
Баллы
113
Чет какая-то логика не понятная
что непонятного?

есть база

условие1
условие2
условие3
условие4
условие5
условие6
условие7

надо чтоб в бд остались все строки с условиями 1.2.3.4

нужно из этой базы удалить все строки не соответствующие условию
то есть я удаляю все строки которые НЕ соответствуют условию

то есть если я впишу условие "условие1" то удаляться все услови и останется только "условие1"
а мне надо чтоб остались еще 2.3.4
 
  • Спасибо
Реакции: TIIGR и Gulid

backoff

Client
Регистрация
20.04.2015
Сообщения
5 925
Благодарностей
6 389
Баллы
113

inotoxic

Client
Регистрация
20.04.2015
Сообщения
354
Благодарностей
162
Баллы
43
Ну так составь запрос к БД
точный синтаксис не помню

SQL:
DELETE `столбец с значением`
FROM `таблица БД`
WHERE `столбец с значением`== '1-е условие'
AND`столбец с значением` != '2-е условие'
AND`столбец с значением` != '3-е условие'
AND`столбец с значением` != '4-е условие'
вместо !=
попробовать операторы LIKE и REGEXP
 

backoff

Client
Регистрация
20.04.2015
Сообщения
5 925
Благодарностей
6 389
Баллы
113

inotoxic

Client
Регистрация
20.04.2015
Сообщения
354
Благодарностей
162
Баллы
43

backoff

Client
Регистрация
20.04.2015
Сообщения
5 925
Благодарностей
6 389
Баллы
113
а как вытащить все строки где есть @mail.ru ?
 
  • Спасибо
Реакции: TIIGR и Gulid

inotoxic

Client
Регистрация
20.04.2015
Сообщения
354
Благодарностей
162
Баллы
43
синтаксис может быть не точный

SELECT (*)
FROM `таблица БД`
WHERE `столбец` REGEXP '\@mail.ru'

или
SELECT (*)
FROM `таблица БД`
WHERE `столбец` LIKE '%@mail.ru%'
 
  • Спасибо
Реакции: backoff

backoff

Client
Регистрация
20.04.2015
Сообщения
5 925
Благодарностей
6 389
Баллы
113
  • Спасибо
Реакции: TIIGR и Gulid

inotoxic

Client
Регистрация
20.04.2015
Сообщения
354
Благодарностей
162
Баллы
43
Так и что в итоге?
БД по условиям обрабатывается быстрее ? или нет ?
 

backoff

Client
Регистрация
20.04.2015
Сообщения
5 925
Благодарностей
6 389
Баллы
113
настраиваю.

просто тут зенка брала и пыталась обработать 5млн строк, а тут будет делать выборка по 100
короче на все надо куча времени :(
 
  • Спасибо
Реакции: TIIGR и Gulid

inotoxic

Client
Регистрация
20.04.2015
Сообщения
354
Благодарностей
162
Баллы
43
Опять не понятно
В самом начале нужно было удалить по условию
Сейчас делаете выборку с лимитом
Почему сразу не удалить по условию?
 

backoff

Client
Регистрация
20.04.2015
Сообщения
5 925
Благодарностей
6 389
Баллы
113
ага, немного затупил, щас просто бекап создам
 
  • Спасибо
Реакции: TIIGR и Gulid

backoff

Client
Регистрация
20.04.2015
Сообщения
5 925
Благодарностей
6 389
Баллы
113
короче пытаюсь удалить ненужное, не получается пробовал эти запросы, они выводят все равно всю базу

Код:
SELECT * FROM mails WHERE mail not like '%mail.ru%' or mail not like '%inbox.ru%' or mail not like '%bk.ru%' or mail not like '%list.ru%'

SELECT * FROM mails WHERE mail not REGEXP 'mail.ru' or mail not REGEXP 'inbox.ru' or mail not REGEXP 'bk.ru' or mail not REGEXP 'list.ru'
может можно как-то по одному запросу перенести в другую базу?
ну то есть, сделать отдельную базу новую и запросом сначала mail перенести пото list и тп ?

ps \ select это для теста посмотреть что выбирает при этом
 
  • Спасибо
Реакции: TIIGR и Gulid

inotoxic

Client
Регистрация
20.04.2015
Сообщения
354
Благодарностей
162
Баллы
43

backoff

Client
Регистрация
20.04.2015
Сообщения
5 925
Благодарностей
6 389
Баллы
113
мне надо удалить все КРОМЕ 4 пунктов, уже не знаю как донести
короче чтобы в базе остались только емайлы от майл ру
 
  • Спасибо
Реакции: TIIGR и Gulid

inotoxic

Client
Регистрация
20.04.2015
Сообщения
354
Благодарностей
162
Баллы
43
Епрст...
в самом начале писал...

ладно
так выборку получишь всех, кроме "@mail.ru"

SQL:
SELECT *
FROM mails
WHERE `mail` NOT LIKE '%@mail.ru%'
так удалишь всех, кроме "@mail.ru",
SQL:
DELETE `mails`
FROM mails
WHERE `mail` NOT LIKE '%@mail.ru%'
 

kapelan28

Client
Регистрация
22.09.2015
Сообщения
469
Благодарностей
185
Баллы
43
мне надо удалить все КРОМЕ 4 пунктов, уже не знаю как донести
короче чтобы в базе остались только емайлы от майл ру
надо подключить БД к MS Access и там через конструктор запросов создать запрос, который будет выполнять нужную операцию. У @sibbora в Академии этот момент хорошо рассмотрен. Может, и на ютубе есть уроки...
 

backoff

Client
Регистрация
20.04.2015
Сообщения
5 925
Благодарностей
6 389
Баллы
113
я в самом начале написал
не соответствующие условию
и само условие написал
Код:
(условие1|условие2|условие3|условие4)
так удалишь всех, кроме "@mail.ru",
да это я уже понял

как мне НЕ УДАЛИТЬ inbox list и bk

я же пишу запрос, по нему же понятно что мне надо
Код:
SELECT * FROM mails
WHERE mail
not like '%mail.ru%' 
or mail not like '%inbox.ru%' 
or mail not like '%bk.ru%' 
or mail not like '%list.ru%'
 
Последнее редактирование:
  • Спасибо
Реакции: TIIGR и Gulid

inotoxic

Client
Регистрация
20.04.2015
Сообщения
354
Благодарностей
162
Баллы
43
SQL:
DELETE `mails`
FROM mails
WHERE `mail` NOT LIKE '%@mail.ru%'
AND `mail` NOT LIKE '%@yandex.ru%'
AND `mail` NOT LIKE '%@list.ru%'
 

inotoxic

Client
Регистрация
20.04.2015
Сообщения
354
Благодарностей
162
Баллы
43
надо подключить БД к MS Access и там через конструктор запросов создать запрос, который будет выполнять нужную операцию. У @sibbora в Академии этот момент хорошо рассмотрен. Может, и на ютубе есть уроки...
Тяжеловеса Acces подключать, что-бы работать с конструктором запросов?
Не надо так.
heidisql - из пакета open server - вполне хватает. в нем есть вкладка для составления запросов.
 

backoff

Client
Регистрация
20.04.2015
Сообщения
5 925
Благодарностей
6 389
Баллы
113
методом тыка подобрал :-)
как раз получилось как ты написал :-)

Код:
SELECT * FROM mails
WHERE mail
not like '%mail.ru%' AND
mail not like '%inbox.ru%' AND 
mail not like '%bk.ru%' AND 
mail not like '%list.ru%'
работает как надо
тоже ей пользуюсь, классная прога
 
  • Спасибо
Реакции: TIIGR и Gulid

kapelan28

Client
Регистрация
22.09.2015
Сообщения
469
Благодарностей
185
Баллы
43

inotoxic

Client
Регистрация
20.04.2015
Сообщения
354
Благодарностей
162
Баллы
43

inotoxic

Client
Регистрация
20.04.2015
Сообщения
354
Благодарностей
162
Баллы
43

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)