SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 04.05.2012 10:15:07

in9emix
Завсегдатай
Зарегистрирован: 20.04.2012
Сообщений: 37

Удаление повторяющихся строк из таблицы в mysql

Подскажите каким запросом можно удалить повторяющиеся строки в таблице mysql ? А то проблема в том что методом POST передается некоторая информация и при обновлении странички в браузере эти данные что были в POST опять летят в БД. И там дублируются по многу раз если нажимаешь обновление ... Я конечно легко обошелся GROUP BY (повторяющееся поле)...Всё хорошо, но душа то болит что в БД бардак )


Труднее всего заработать первый миллион долларов. Аристотель Онассис

Неактивен

 

#2 04.05.2012 10:16:40

in9emix
Завсегдатай
Зарегистрирован: 20.04.2012
Сообщений: 37

Re: Удаление повторяющихся строк из таблицы в mysql

Ну и конечно же мне надо что бы осталась строчка с самой свежей датой.


Труднее всего заработать первый миллион долларов. Аристотель Онассис

Неактивен

 

#3 04.05.2012 10:23:12

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Удаление повторяющихся строк из таблицы в mysql

В данном случае не лучше ли исключить возможность добавлять дублирующиеся строки? Этого можно добиться уникальным ключом на нужные поля - приведите структуру таблицы, подскажу как его создать. Также посмотрите в сторону on duplicate key, insert ignore и replace - чтобы запись обновлялись при попытке вставке, если такая уже есть.

Удаление дублей покажу на имеющейся структуре таблицы. И нужно, чтобы было четкое представление - что именно является дублем.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#4 04.05.2012 10:42:48

in9emix
Завсегдатай
Зарегистрирован: 20.04.2012
Сообщений: 37

Re: Удаление повторяющихся строк из таблицы в mysql

Я привел ниже 2 скриншота. Структура и саму таблицу. Я сделал некую группу где все могу оставлять свои комментарии. Конечно дубли происходят только лишь если обновить страничку, но а иначе никак...пользователю же надо знать что уже ответили ему например. Приходиться обновлять для этого. Конечно я понимаю есть всякие решения на AJAX(e) и т.д...но сейчас я изучаю php + mysql. И так:
Есть login - это ник того юзера кто написал сообщение.
login_id - его персональный номер.
id_group - номер группы.
group_comment - текст сообщения который присылается с другой страницы методом пост в переменной $group_comment
avatar - ну и аватарка юзера с date(датой)

Задача: Не вносить в бд содержимое переменной $group_comment  при нажатии на обновление браузера.

Кстати добавление в бд выглядит следующим образом:

if (isset($send_message)) {   

$result3 = mysql_query("INSERT INTO groups_comments (login, login_id, id_group, group_comment, avatar, date) VALUES ('$name_user', '$id_user', '$id_group', '$send_message', '$avatar_user', '$date')");
}

http://s003.radikal.ru/i203/1205/ef/3267337f292c.png
http://s019.radikal.ru/i633/1205/06/a520f879e75e.png


Труднее всего заработать первый миллион долларов. Аристотель Онассис

Неактивен

 

#5 04.05.2012 12:24:39

in9emix
Завсегдатай
Зарегистрирован: 20.04.2012
Сообщений: 37

Re: Удаление повторяющихся строк из таблицы в mysql

deadka написал:

В данном случае не лучше ли исключить возможность добавлять дублирующиеся строки? Этого можно добиться уникальным ключом на нужные поля - приведите структуру таблицы, подскажу как его создать. Также посмотрите в сторону on duplicate key, insert ignore и replace - чтобы запись обновлялись при попытке вставке, если такая уже есть.

Удаление дублей покажу на имеющейся структуре таблицы. И нужно, чтобы было четкое представление - что именно является дублем.

Буду благодарен вашей помощи.


Труднее всего заработать первый миллион долларов. Аристотель Онассис

Неактивен

 

#6 11.05.2012 17:02:35

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Удаление повторяющихся строк из таблицы в mysql

Уж если делать по уму, то у меня вопрос - зачем в таблице комментариев указывать login юзера, его аватарку, его группу - не проще ли вытащить все эти данные из таблицы пользователей по его id? Это сэкономить большое количество усилий в будущем.

Так что предложил бы Вам хранить в таблице комментариев только
id комментария,
id пользователя, оставившего комментарий
сам комментарий,
дату/время, когда был создан комментарий.

А вот насчет того, чем задаётся уникальность я, признаться, не понял.
Вы хотите, чтобы если пользователь vika оставлял один и тот же комментарий два раза (допустим из-за обновления страницы, с чего Вы начали свой пост), то чтобы комментарий с более старой датой удалялся или как?


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#7 11.05.2012 17:07:38

in9emix
Завсегдатай
Зарегистрирован: 20.04.2012
Сообщений: 37

Re: Удаление повторяющихся строк из таблицы в mysql

deadka написал:

Уж если делать по уму, то у меня вопрос - зачем в таблице комментариев указывать login юзера, его аватарку, его группу - не проще ли вытащить все эти данные из таблицы пользователей по его id? Это сэкономить большое количество усилий в будущем.

Так что предложил бы Вам хранить в таблице комментариев только
id комментария,
id пользователя, оставившего комментарий
сам комментарий,
дату/время, когда был создан комментарий.

А вот насчет того, чем задаётся уникальность я, признаться, не понял.
Вы хотите, чтобы если пользователь vika оставлял один и тот же комментарий два раза (допустим из-за обновления страницы, с чего Вы начали свой пост), то чтобы комментарий с более старой датой удалялся или как?

Совершенно верно, хочу чтобы комментарий с более старой датой удалялся.


Труднее всего заработать первый миллион долларов. Аристотель Онассис

Неактивен

 

#8 11.05.2012 17:16:20

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Удаление повторяющихся строк из таблицы в mysql

Тогда, либо
1) перед вставкой проверяйте, что нет еще такого комментария, и если есть, то обновляйте, а не вставляйте
2) создайте уникальный ключ на содежимое комментария + id пользователя и воспользуйтесь ON DUPLICATE KEY UPDATE.

Прочтите полностью http://phpclub.ru/mysql/doc/insert.html или http://dev.mysql.com/doc/refman/5.5/en/insert.html


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#9 11.05.2012 17:24:59

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Удаление повторяющихся строк из таблицы в mysql

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

Неактивен

 

#10 11.05.2012 17:26:48

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Удаление повторяющихся строк из таблицы в mysql

Согласен, но топикстартер настаивает почему-то smile. В-принципе стоило бы еще задуматься о том, к чему относится комментарий.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

Board footer

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