J'ai une table wordpress comme ça (phpmyadmin et 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 |
+----+-----------+------------+
J'ai besoin d'obtenir l'id de toutes les lignes en double où meta_key = 'import_id'
afin de les retirer d'une autre table.
Je veux conserver le MIN (id) de chacune des lignes renvoyées où 'meta_value' est identique
c'est-à-dire que la sortie devrait être:
| id | meta_key | meta_value |
+----+-----------+------------+
| 2 | import_id | abc |
| 3 | import_id | def |
| 6 | import_id | xyz |
+----+-----------+------------+
ou juste
| id |
+----+
| 2 |
| 3 |
| 6 |
+----+
s'il vous plaît aider comme alors que cela peut être une question en double, j'ai toujours du mal car mon SQL est un peu rouillé.
Je peux obtenir des doublons où meta_key = 'import_id' ressemble à ceci:
SELECT id,meta_value
FROM TABLE
WHERE meta_key='import_id'
GROUP BY meta_value
HAVING Count(meta_value) > 1
et je veux à partir de cela les valeurs NON MIN (id)
si vous souhaitez conserver la ligne avec la valeur id la plus basse:
DELETE n1 FROM table n1, table n2 WHERE n1.id > n2.id AND n1.meta_key = n2.meta_key
OU si vous souhaitez conserver la ligne avec la valeur id la plus élevée:
DELETE n1 FROM table n1, table n2 WHERE n1.id < n2.id AND n1.meta_key= n2.meta_key
Donnez une sauvegarde de votre table wp_usermeta
et essayez-la:
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)
Utilisez MIN
au lieu de MAX
pour conserver la ligne avec l'id le plus bas.