Master-X
Форум | Новости | Статьи
Главная » Форум » Программинг, Скрипты, Софт, Сервисы » 
Тема: Удаление дублей в mysql
цитата
13/02/18 в 20:46
 DH
phpmyadmin В БД по колонке title
xxx 10 записей
xxxx 5 записей
xxxxx 7 записей
и так далее.
Всего таких 2к ))
Руками эт жопа.
Какие варианты есть ?
цитата
13/02/18 в 21:46
 mx-user
Не забудь сделать копию таблицы, я хз какой будет результат icon_cool.gif

DELETE * FROM table
WHERE id NOT IN(
SELECT MIN(id) AS id
FROM table
GROUP BY title
)
цитата
14/02/18 в 04:37
 Stek
php скриптик тебе в помощь, т.е. попросить любого прогера его написать. Хотя запрос от mx-user: теоретически выглядит правильным и вполне может сработать.
цитата
14/02/18 в 15:00
 DH
Stek писал:
php скриптик тебе в помощь, т.е. попросить любого прогера его написать.


Сколько такой скриптик будет стоить ? )
цитата
14/02/18 в 15:24
 Mika
На кой тебе скриптик, когда тебе рабочий SQL запрос дали, которой только выполнить осталось?
цитата
14/02/18 в 15:31
 sd.timoshenko
Сделай тестовую таблицу с дублями и проверь на ней решение выше.
цитата
14/02/18 в 16:12
 DH
Если я все верно понял
DELETE * FROM `Название таблицы` table
WHERE id NOT IN(
SELECT MIN(id) AS id
FROM table
GROUP BY (название колонки)
)

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '* FROM table WHERE id NOT IN( SELECT MIN(id) AS id FROM table GROUP BY p' at line 1
цитата
14/02/18 в 21:15
 Mika
DH писал:
Если я все верно понял
DELETE * FROM `Название таблицы` table
WHERE id NOT IN(
SELECT MIN(id) AS id
FROM table
GROUP BY (название колонки)
)

1. В запросе DELETE не нужно ставить никаких звездочек после DELETE. Просто пишется "DELETE FROM ...".
2. После "FROM" должно быть название таблицы без всяких "table". Как в первом, так и во втором случае.
3. Вероятно MySQL не даст изменять/удалять таблицу, когда условие строится непосредственно на той же таблице, но это можно обойти вложенным селектом.
Т.е. итоговый запрос должен быть таким:
DELETE FROM test WHERE id NOT IN (SELECT * FROM (SELECT MIN(id) AS id FROM test GROUP BY title) AS tmp);
где test - это название таблицы
цитата
14/02/18 в 22:00
 trafflo
ALTER IGNORE TABLE table_name ADD UNIQUE INDEX tmp(column_name)

только сделай дамп старой таблицы на всякий случай)
получившийся индекс можешь потом удалить в Structure - indexes
цитата
14/02/18 в 22:46
 DH
Mika писал:
1. В запросе DELETE не нужно ставить никаких звездочек после DELETE. Просто пишется "DELETE FROM ...".
2. После "FROM" должно быть название таблицы без всяких "table". Как в первом, так и во втором случае.
3. Вероятно MySQL не даст изменять/удалять таблицу, когда условие строится непосредственно на той же таблице, но это можно обойти вложенным селектом.
Т.е. итоговый запрос должен быть таким:
DELETE FROM test WHERE id NOT IN (SELECT * FROM (SELECT MIN(id) AS id FROM test GROUP BY title) AS tmp);
где test - это название таблицы


Ура сработало )))))) smail54.gif smail54.gif smail54.gif

А как почистить title от ненужных символов ()№;%:}{ итд ?
цитата
15/02/18 в 04:40
 Stek
DH писал:
Сколько такой скриптик будет стоить ? )

$10


DH писал:
А как почистить title от ненужных символов ()№;%:}{ итд ?


UPDATE table_name SET title = REPLACE(title, '№', '');
Вроде так. Ну и соответственно перед запуском проверить как будет выглядеть:

SELECT REPLACE(title, '№', '') AS new_title FROM table_name;
цитата
15/02/18 в 17:41
 DH
Stek писал:
$10




UPDATE table_name SET title = REPLACE(title, '№', '');
Вроде так. Ну и соответственно перед запуском проверить как будет выглядеть:

SELECT REPLACE(title, '№', '') AS new_title FROM table_name;


Работает! Спасибо smail54.gif smail54.gif smail54.gif


Эта страница в полной версии