Ich habe so eine WordPress-Tabelle (phpmyadmin und 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 |
+----+-----------+------------+
Ich brauche die ID aller doppelten Zeilen, in denen meta_key = 'import_id'
um sie von einem anderen Tisch zu entfernen.
Ich möchte die MIN (id) jeder der zurückgegebenen Zeilen behalten, wobei 'meta_value' gleich ist
die Ausgabe sollte sein:
| id | meta_key | meta_value |
+----+-----------+------------+
| 2 | import_id | abc |
| 3 | import_id | def |
| 6 | import_id | xyz |
+----+-----------+------------+
oder nur
| id |
+----+
| 2 |
| 3 |
| 6 |
+----+
bitte helfen Sie, da dies eine doppelte Frage sein kann. Ich habe immer noch Probleme, da mein SQL etwas rostig ist.
Ich kann Duplikate erhalten, bei denen meta_key = 'import_id' wie folgt lautet:
SELECT id,meta_value
FROM TABLE
WHERE meta_key='import_id'
GROUP BY meta_value
HAVING Count(meta_value) > 1
und ich möchte daraus die NON MIN (id) Werte
wenn Sie die Zeile mit der niedrigsten ID beibehalten möchten:
DELETE n1 FROM table n1, table n2 WHERE n1.id > n2.id AND n1.meta_key = n2.meta_key
ODER wenn Sie die Zeile mit der höchsten ID behalten möchten:
DELETE n1 FROM table n1, table n2 WHERE n1.id < n2.id AND n1.meta_key= n2.meta_key
Erstellen Sie eine Sicherungskopie Ihrer wp_usermeta
-Tabelle und versuchen Sie es:
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)
Verwenden Sie MIN
anstelle von MAX
, um die Zeile mit der niedrigsten ID beizubehalten.