SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 27.08.2010 17:12:40

mike.d
Участник
Зарегистрирован: 27.08.2010
Сообщений: 3

Как удалить строки с дублирующимися значениями

Добрый день, не могу решить вопрос. Есть таблица:

http://dl.dropbox.com/u/3829178/Screen%20shot%202010-08-27%20at%2016.53.50.png

Необходимо удалить из нее строки (если их более 5) с совпадающими значениями option_id и ip. Наверное, криво объясняю. То есть нужно удалить выделенное пуктиром:

http://dl.dropbox.com/u/3829178/Screen%20shot%202010-08-27%20at%2017.04.07.png

Как это можно сделать?

Неактивен

 

#2 27.08.2010 17:39:36

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Как удалить строки с дублирующимися значениями

Одним запросом не получится, прийдется сначала делать группирующую
выборку, а потом для каждого ip + option_id удалять отдельным запросом.

Впрочем, возможно, удастся что-то сделать через подзапрос с помощью
GROUP_CONCAT и строковых функций (отрезать первые пять id, а остальное
скормить DELETE).

Неактивен

 

#3 27.08.2010 18:23:34

mike.d
Участник
Зарегистрирован: 27.08.2010
Сообщений: 3

Re: Как удалить строки с дублирующимися значениями

paulus написал:

Одним запросом не получится, прийдется сначала делать группирующую
выборку, а потом для каждого ip + option_id удалять отдельным запросом.

К сожалению, я совсем не силен в MySQL. На данный момент нагулил только select DISTINCT option_id, ip from mytable, но это совсем не то hmm. Я не знаю, как реализовать ваши идеи. Вы можете написать сам запрос? roll

Неактивен

 

#4 27.08.2010 18:57:58

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Как удалить строки с дублирующимися значениями

SELECT GROUP_CONCAT(id)
FROM tablename GROUP BY ip, option_id
HAVING COUNT(*) > 5;

Из полученных строк отрезаете пять id, которые надо оставить, и потом

DELETE FROM tablename WHERE id IN (и тут перечисляете все, что осталось);

Неактивен

 

#5 27.08.2010 21:15:51

mike.d
Участник
Зарегистрирован: 27.08.2010
Сообщений: 3

Re: Как удалить строки с дублирующимися значениями

paulus написал:

SELECT GROUP_CONCAT(id)
FROM tablename GROUP BY ip, option_id
HAVING COUNT(*) > 5;

Из полученных строк отрезаете пять id, которые надо оставить, и потом

DELETE FROM tablename WHERE id IN (и тут перечисляете все, что осталось);

Что-то не получается, смотрите:

http://dl.dropbox.com/u/3829178/Screen%20shot%202010-08-27%20at%2021.09.48.jpg

Неактивен

 

#6 27.08.2010 21:33:30

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Как удалить строки с дублирующимися значениями

ыыы. Если бы это сработало, то удалило бы все строки. Вы действительно
это хотите? Надо таки будет сделать что-то в редакторе посередине.

Неактивен

 

Board footer

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