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
Не забудь сделать копию таблицы, я хз какой будет результат
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 - это название таблицы
Ура сработало ))))))
А как почистить 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;
Работает! Спасибо
Новая тема
Ответить
Эта страница в полной версии