私はそのようなワードプレスのテーブルを持っています(phpmyadminとMySQL)
| id | meta_key | meta_value |
+----+-----------+------------+
| 1 | import_id | abc |
| 2 | import_id | abc |
| 3 | import_id | def |
| 4 | import_id | xyz |
| 5 | import_id | xyz |
| 6 | import_id | xyz |
| 7 | something | 123 |
| 8 | something | 234 |
+----+-----------+------------+
Meta_key = 'import_id'の場合、すべての重複行のIDを取得する必要があります。
別のテーブルからそれらを削除するために。
'meta_value'が同じ場合、返された各行のMIN(id)を保持したい
すなわち、出力は次のようになります。
| id | meta_key | meta_value |
+----+-----------+------------+
| 2 | import_id | abc |
| 3 | import_id | def |
| 6 | import_id | xyz |
+----+-----------+------------+
あるいは単に
| id |
+----+
| 2 |
| 3 |
| 6 |
+----+
私のSQLは少し錆びているので、これは私がまだ問題を抱えている重複した質問かもしれない間、助けてください。
Meta_key = 'import_id'のように重複することがあります。
SELECT id,meta_value
FROM TABLE
WHERE meta_key='import_id'
GROUP BY meta_value
HAVING Count(meta_value) > 1
私はこれからNON MIN(id)の値を求めています
行を最小のid値で保持したい場合は、次のようにします。
DELETE n1 FROM table n1, table n2 WHERE n1.id > n2.id AND n1.meta_key = n2.meta_key
あるいは、行を最大のid値で保持したい場合は、
DELETE n1 FROM table n1, table n2 WHERE n1.id < n2.id AND n1.meta_key= n2.meta_key
wp_usermeta
テーブルからバックアップを取ってみてください。
DELETE FROM `wp_usermeta` WHERE `umeta_id` NOT IN (SELECT * FROM (SELECT MAX(`um`.`umeta_id`) FROM `wp_usermeta` um GROUP BY `um`.`meta_key`, `um`.`meta_value`) x)
行を最小のIDで保持するには、MIN
の代わりにMAX
を使用します。