Задавайте вопросы, мы ответим
Вы не зашли.
Всем привет!
Не приходилось работать с базой данных, но тут база данных явно "засорилась" из-за ошибок плагинов Wordpressa.
Если коротко, то есть таблица, в ней 4 столбца и много идентичных строк (ненужных), выглядит примерно так
[meta_id] [post_id] [meta_key] [meta_value]
[1111111] [9999999] [_wpbcode] [css……]
[2222222] [9999999] [_wpbcode] [css……]
[3333333] [9999999] [_wpbcode] [css……]
[4444444] [9999999] [_wpbcode] [css……]
[5555555] [3333333] [_wpbcode] [zzz……]
[6666666] [3333333] [_wpbcode] [zzz……]
[7777777] [3333333] [_wpbcode] [zzz……]
[8888888] [3333333] [_wpbcode] [zzz……]
Т.е. мне нужно из таблицы выбрать ВСЕ строки, у которых совпадают поля [post_id], [meta_key] и [meta_value] и удалить все эти строки, кроме одной (не важно какая это будет строка, с каким meta_id, ибо строки идентичны).
Вся таблица забита повторяющими строками, т.е. их очень много и вручную 60 тыс строк перелопачивать не хочется.
Подскажите какой запрос написать в phpMyadmin чтобы за раз поудалять эти дублированные строки?
Спасибо заранее, Морисса.
Неактивен
Неактивен
Ух ты, в этом посту очень похожая ситуация. Спасибо за подсказку.
Для моего случая вот так вроде бы.... Т.е. нужно чтоб совпадали все три столбца из четырех существующих. meta_id в моем случае это primary, уникальный столбец.
CREATE TABLE wp_postmeta_new SELECT max(meta_id) meta_id from wp_postmeta GROUP BY post_id, meta_key, meta_value;
DELETE from wp_postmeta WHERE meta_id NOT IN (select meta_id from wp_postmeta_new);
На компьютере базы нет, а на рабочей сразу применять придется, поэтому лучше переспросить...
Неактивен
Лучше, конечно, тренироваться на кошках.
Создайте копию таблицы
CREATE TABLE new_table LIKE original_table;
INSERT INTO new_table SELECT * FROM original_table;
и далее отладьте на таблице new_table сперва, а когда убедитесь в правильности - делайте на бою.
Неактивен
Благодарю за помощь, всё получилось!
Неактивен
Дополню, задачу можно решить в один запрос:
https://sqlinfo.ru/articles/info/19.html
удалить из таблицы дубликаты (строки с одинаковыми значениями поля col) с меньшим id
DELETE t1 FROM t t1 JOIN t t2 ON t1.col = t2.col AND t1.id < t2.id;
через подзапрос
DELETE t FROM t LEFT JOIN (SELECT max(id) as id, col FROM t GROUP BY col) t1 USING(id) WHERE t1.id IS NULL;
Неактивен