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

  • Автор темы Автор темы backoff
  • Дата начала Дата начала

backoff

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

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

В зенке удаляю такой регуляркой
Код:
Развернуть Свернуть Копировать
(условие1|условие2|условие3|условие4)

ну и все виснет в принципе :-) ну не виснет, просто работает ну очень долго, что просто не дожидаюсь и закрываю принудительно.

поможет ли сниппет в этом случае?
 
У вас в примере четыре условия
Удаляйте отдельными запросами к БД - условия в цикл
 
так не прокатит, удалив по одному условию, удалятся остальные 3
пытался вытащить по одному условию в отдельный список, но там тоже "зависания"
 
  • Оценить
Реакции: TIIGR и Gulid
Чет какая-то логика не понятная
Если как вы говорите
удалив по одному условию, удалятся остальные 3
получится, что база - обработана
Возможно не правильно условие составлено?
 
Чет какая-то логика не понятная
что непонятного?

есть база

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

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

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

то есть если я впишу условие "условие1" то удаляться все услови и останется только "условие1"
а мне надо чтоб остались еще 2.3.4
 
  • Оценить
Реакции: TIIGR и Gulid
Ну так составь запрос к БД
точный синтаксис не помню

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

вместо !=
попробовать операторы LIKE и REGEXP
 
синтаксис может быть не точный

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

или
SELECT (*)
FROM `таблица БД`
WHERE `столбец` LIKE '%@mail.ru%'
 
  • Оценить
Реакции: backoff
или
SELECT (*)
FROM `таблица БД`
WHERE `столбец` LIKE '%@mail.ru%'
ага тоже нашел про LIKE

выглядит так, если кому-то надо будет

Код:
Развернуть Свернуть Копировать
SELECT `mail` FROM `mails` WHERE `mail` LIKE '%@mail.ru%' LIMIT 0, 100
 
  • Оценить
Реакции: TIIGR и Gulid
Так и что в итоге?
БД по условиям обрабатывается быстрее ? или нет ?
 
настраиваю.

просто тут зенка брала и пыталась обработать 5млн строк, а тут будет делать выборка по 100
короче на все надо куча времени :(
 
  • Оценить
Реакции: TIIGR и Gulid
Опять не понятно
В самом начале нужно было удалить по условию
Сейчас делаете выборку с лимитом
Почему сразу не удалить по условию?
 
короче пытаюсь удалить ненужное, не получается пробовал эти запросы, они выводят все равно всю базу

Код:
Развернуть Свернуть Копировать
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
Епрст...
в самом начале писал...

ладно
так выборку получишь всех, кроме "@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%'
 
мне надо удалить все КРОМЕ 4 пунктов, уже не знаю как донести
короче чтобы в базе остались только емайлы от майл ру
надо подключить БД к MS Access и там через конструктор запросов создать запрос, который будет выполнять нужную операцию. У @sibbora в Академии этот момент хорошо рассмотрен. Может, и на ютубе есть уроки...
 
я в самом начале написал
не соответствующие условию
и само условие написал
Код:
Развернуть Свернуть Копировать
(условие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
SQL:
Развернуть Свернуть Копировать
DELETE `mails`
FROM mails
WHERE `mail` NOT LIKE '%@mail.ru%'
AND `mail` NOT LIKE '%@yandex.ru%'
AND `mail` NOT LIKE '%@list.ru%'
 
надо подключить БД к MS Access и там через конструктор запросов создать запрос, который будет выполнять нужную операцию. У @sibbora в Академии этот момент хорошо рассмотрен. Может, и на ютубе есть уроки...

Тяжеловеса Acces подключать, что-бы работать с конструктором запросов?
Не надо так.
heidisql - из пакета open server - вполне хватает. в нем есть вкладка для составления запросов.
 
методом тыка подобрал :)
как раз получилось как ты написал :)

Код:
Развернуть Свернуть Копировать
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

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