Forum Webscript.Ru

Общие => Базы данных => Тема начата: alesh от 10 Февраля 2004, 16:12:31

Название: Delete From table
Отправлено: alesh от 10 Февраля 2004, 16:12:31
Скажите, а можно ли посредствами одного SQL запроса удалить все записи с дублирующимся названием например.

Т.Е. Есть таблица news в ней есть много дублирующихся новостей, как удалить все где поле title одинаковое?
Название: Delete From table
Отправлено: Меняздесьдавнонет от 10 Февраля 2004, 16:21:04
delete from table where title=\'$title\';
Название: Delete From table
Отправлено: alesh от 10 Февраля 2004, 16:24:02
Ты не понял, либо издиваешься.

Есть таблица в ней 15 тысяч записей.
бывают некоторые дублирующиеся - тоесть они разные бывают.

Можно ли посредствами _ТОЛЬКО_ sql удалить все дублирующиеся новости.
Название: Delete From table
Отправлено: гоша от 10 Февраля 2004, 16:47:41
alter ignore table \'mytable\' add unique something (title);
Название: Delete From table
Отправлено: ThE0ReTiC от 10 Февраля 2004, 18:37:51
[off]перехали[/off]
Название: Delete From table
Отправлено: alesh от 10 Февраля 2004, 18:39:12
гоша Я -  не совсем понял, что именно выполняет эта команда? пытался копаться в мануале, не получилось.
Название: Delete From table
Отправлено: гоша от 10 Февраля 2004, 18:54:34
добавляет уникальный индекс по полю title.

слово ignore велит ему удалить записи, в которых значение слова title повторяется, оставив из них только первую.

по-моему, это не совсем то что вам нужно... :-)
Название: Delete From table
Отправлено: alesh от 10 Февраля 2004, 19:53:00
да. вернее совсем не то:-)
Что-ж.

придётся 15.000 обрабатывать через пхп
Название: Delete From table
Отправлено: гоша от 10 Февраля 2004, 20:06:34
ну зачем же все 15 тыщ.

select id from mytable group by title having count(title) > 1

выберет только дубликаты. Собрать их в массив, а потом

delete from mytable where id in (".implode(",",массив)

а если мускуль четвертый, то подзапросом.
Название: Delete From table
Отправлено: alesh от 10 Февраля 2004, 20:09:13
гоша  Спасибо! Это прекрасно!:-)
Название: Delete From table
Отправлено: Меняздесьдавнонет от 10 Февраля 2004, 20:14:14
гоша, а
insert into tmp select id from mytable group by title having count(title)<2
?
Название: Delete From table
Отправлено: гоша от 10 Февраля 2004, 20:35:26
Ну по-моему лучше удалить.
Таблицу-то еще скопировать надо.

А вообще вот тут

http://www.mysql.com/doc/en/Rewriting_subqueries.html

пишут "The first option is to upgrade to MySQL version 4.1." :)
Название: Delete From table
Отправлено: it4all от 10 Февраля 2004, 22:01:58
гоша я балдею от твоего знания SQL зайди на мой топ,помоги !!!
ПАЖАЛУСТА!!
http://forums.webscript.ru/showthread.php?s=&threadid=15725&msgnum=3 (http://forums.webscript.ru/showthread.php?s=&threadid=15725&msgnum=3)
Название: Delete From table
Отправлено: гоша от 11 Февраля 2004, 11:39:09
напрасно балдеешь, потому как я вроде бы слажал там выше. :-(

На самом деле

select id from mytable group by title having count(title) > 1

выберет опять-таки первую из дубликатов. Надо, конечно же,

select title from mytable group by title having count(title) > 1
Название: Delete From table
Отправлено: alesh от 11 Февраля 2004, 11:40:40
у меня, кстати, всё работает на первом варианте
Название: Delete From table
Отправлено: гоша от 11 Февраля 2004, 11:45:30
нет-нет, не работает так.



mysql> select * from aa;
+-------+------+
| title | id   |
+-------+------+
| a     |  100 |
| a     |   26 |
| a     |   28 |
| b     |   62 |
| b     |   25 |
| b     |  141 |
| x     |   29 |
| z     |  123 |
| y     |  129 |
+-------+------+

mysql> select * from aa group by title having count(title)>1;
+-------+------+
| title | id   |
+-------+------+
| a     |  100 |
| b     |   62 |
+-------+------+

Название: Delete From table
Отправлено: it4all от 11 Февраля 2004, 17:27:19
гоша у алеша уже все работает,а ты пытаешся собственнубю лажу исправить.
Что тебе стоит помочь?
Или около пхппешный флейм на других топах интереснее?
Мне нужно-то всего один пример грамотного запроса и все дальше я буду учится сам,а то все доки какие я скачал - полный отстой (кроме маны конечно,но учиться по ней невозможно)