Вопрос по базам данных, mySQL

yriy158

Client
Регистрация
10.08.2013
Сообщения
491
Благодарностей
301
Баллы
63
Впрошу помочь з одним SQL запросом.
В БД есть таблица tab1, в которой есть 2 столбца. Первый столбец - ID, он AUTO_INCREMENT и туда записывается просто порядочный номер спаршеной инфы.
Второй столбец - URL. В этом столбце встречаются дубли.
Как мне удалить с таблицы строки, у которых есть дубли в URL ? Буду благодарен если подскажете, для меня это пока что очень темное дело.
Пример:
ID|URL
1|a
2|с
3|с
4|b
5|a
6|b

Должно получится:
ID|URL
1|a
2|с
4|b
 

Gfoblin

Client
Регистрация
30.05.2013
Сообщения
4 519
Благодарностей
991
Баллы
113
Впрошу помочь з одним SQL запросом.
В БД есть таблица tab1, в которой есть 2 столбца. Первый столбец - ID, он AUTO_INCREMENT и туда записывается просто порядочный номер спаршеной инфы.
Второй столбец - URL. В этом столбце встречаются дубли.
Как мне удалить с таблицы строки, у которых есть дубли в URL ? Буду благодарен если подскажете, для меня это пока что очень темное дело.
Пример:
ID|URL
1|a
2|с
3|с
4|b
5|a
6|b

Должно получится:
ID|URL
1|a
2|с
4|b
Пишу на пыхе поэтому расскажу как вижу

SELECT ID, URL FROM `table1` GROUP BY URL HAVING COUNT(*) > 1
потом
delete from `table1` where URL='$URL' and ID=!$ID

в один запрос запихнуть пока не соображу...

P.S. Если нужно что бы все юрлы изначально собирались уникальными надо поставить UNIQUE на поле url
 
  • Спасибо
Реакции: yriy158 и one

yriy158

Client
Регистрация
10.08.2013
Сообщения
491
Благодарностей
301
Баллы
63
P.S. Если нужно что бы все юрлы изначально собирались уникальными надо поставить UNIQUE на поле url
что бы собирались уникальными это вообще было бы супер!!Вот здесь имеете ввиду?
 

Gfoblin

Client
Регистрация
30.05.2013
Сообщения
4 519
Благодарностей
991
Баллы
113
что бы собирались уникальными это вообще было бы супер!!Вот здесь имеете ввиду?
да оно!
только учтите, что если база уже заполнена не уникальными то не прокатит :(
 
  • Спасибо
Реакции: proffman, yriy158 и one

one

Client
Регистрация
22.09.2015
Сообщения
6 793
Благодарностей
1 264
Баллы
113
да оно!
только учтите, что если база уже заполнена не уникальными то не прокатит :(
т.е. предварительно, перед добавлением записи будет происходить проверка на существование уже таких же данных что мы пытаемся записать? Если уже данные существуют, выдаст ошибку?
 

Gfoblin

Client
Регистрация
30.05.2013
Сообщения
4 519
Благодарностей
991
Баллы
113
т.е. предварительно, перед добавлением записи будет происходить проверка на существование уже таких же данных что мы пытаемся записать? Если уже данные существуют, выдаст ошибку?
да помоему выдаст ошибку при insert, есть еще такая штука как REPLACE - она так же работает как инсерт, но если поле совпадает, она обновит другие поля (ну там если вы дату ставите или еще чего дополнительно)

Вот нагуглил лайфхак, но пишут не на всех версиях работает, по быстрой уникализации, можно просто прибить добавив IGNORE :-)
ALTER IGNORE TABLE `mytable` ADD UNIQUE INDEX `Obyavleniya` ( `Obyavleniya`)
 
  • Спасибо
Реакции: proffman, yriy158 и one

proffman

Client
Регистрация
24.01.2013
Сообщения
547
Благодарностей
51
Баллы
28
да помоему выдаст ошибку при insert, есть еще такая штука как REPLACE - она так же работает как инсерт, но если поле совпадает, она обновит другие поля (ну там если вы дату ставите или еще чего дополнительно)

Вот нагуглил лайфхак, но пишут не на всех версиях работает, по быстрой уникализации, можно просто прибить добавив IGNORE :-)
ALTER IGNORE TABLE `mytable` ADD UNIQUE INDEX `Obyavleniya` ( `Obyavleniya`)
UNIQUE пока отлично себя показывает, дубли пропущает и записывает только новые данные. REPLACE также хорошая штука, помню, когда то давно она меня хорошо выручила, клепал базу данных в Notwpad++o_O ага, в том самом :D пока тогда дошло что такие объемы надо разбивать, сутки потратил, помимо всякого синтаксиса и т.п. Ну не, наврал, кудаж без зенки, но и вручную клепал костыли. С базой данных напрямую с ZP еще не работал. :eek: Только сейчас начинаю осваивать и вижу какая это мощь на самом деле ))
 
Последнее редактирование:

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