2014-10-31 3 views
0

Так что я имею дело с нечетной проблемой в wordpress, в которой у меня был плагин, создающий повторяющиеся записи в базе данных, и не понимающий так, потому что Wordpress помогал, увеличивая значение post_id, позволяя ему полностью игнорировать все другие значения базы данных, которые он должен был просто перезаписать. Я исправил проблему, которая создала это, но я остался с очень переполненной базой данных со скоростью около 45 000 строк, многие из которых являются просто дубликатами одних и тех же данных.удаление записей дублирующимся столбцом

Имя базы данных wp_postmeta с столбцами meta_id, post_id, meta_key, meta_value. Я чувствую, что мне нужно просто удалить повторяющиеся записи столбца «meta_value», сохраняя последний «post_id» любого дублирующегося значения. Я придумал этот запрос после того, как прибегая к помощи немного, и казалось, что он должен делать то, что мне нужно сделать, кроме того, что я получаю ошибку версии ниже код и ошибки:

DELETE FROM wp_postmeta WHERE `meta_value` NOT IN (
    SELECT `meta_value` FROM wp_postmeta 
    GROUP BY `meta_value` 
    ORDER BY `post_id` DESC 
    LIMIT 1 
); 

#1235 - This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery' 

Теперь я понимаю, что это говорит, но я недостаточно хорошо знаком с работой с sql, чтобы обойти это с помощью другого запроса, который по существу захватывал бы все дубликаты meta_values ​​и удалял те, которые не являются последними «post_id». Может ли кто-нибудь указать мне в правильном направлении взглянуть или помочь мне с лучшим решением?

ответ

0

Это может сделать это за вас. Он должен удалить все, кроме строки с самым высоким значением post_id.

DELETE oldposts.* FROM wp_postmeta oldposts 
JOIN wp_postmeta newposts ON oldposts.meta_value = newposts.meta_value 
    AND newposts.post_id > oldposts.post_id 
Смежные вопросы