suppresion des doublons.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

19 déc. 2007, 16:00

La syntaxe est

Code : Tout sélectionner

WHERE champs IN( sous-requete)
pas

Code : Tout sélectionner

WHERE champs = IN( sous-requete)
Le message d'erreur commence toujours à l'endroit où se trouve l'erreur. Tu nous aurais donné le message d'erreur dès le début, tu aurais gagné 2h ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphanteau du PHP | 29 Messages

19 déc. 2007, 16:04

voici le message d'erreur qu'il me met:

requête SQL: Documentation

Code : Tout sélectionner

DELETE FROM `calcul` WHERE `admin_nom` IN ( SELECT `admin_nom` FROM `calcul` GROUP BY `admin_nom` HAVING COUNT( `admin_nom` ) >1 )

MySQL a répondu:Documentation
#1093 - You can't specify target table 'calcul' for update in FROM clause

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

19 déc. 2007, 16:16

Tu ne peux mettre la table que tu modifies dans une sous-requête :?

Soit tu passes par une vue temporaire, soit tu sélectionnes les données dans une requête, tu récupères les données et tu les passes en dur à une seconde requête DELETE
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphanteau du PHP | 29 Messages

19 déc. 2007, 16:25

je veux bien faire comme tu dis mais je ne sais pas faire .. tu pourrais me mettre sur le chemin ..
Cordialement

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

19 déc. 2007, 16:31

Tu exécutes ton SELECT normal, celui qui te permet de retrouver les nom en doublons.
Tu récupères la liste des résultats et tu la mémorises dans une chaine sous la forme

Code : Tout sélectionner

'nom1','nom2'
Tu exécutes une requête DELETE en remplaçant la sous-requête du IN par cette chaine.

ATTENTION : je viens de réaliser que cette requête va te supprimer tous les enregistrements qui sont doublonnés, pas uniquement les doublons.

Si, dans ta table, tu as :
admin1
admin2
admin3
admin2
admin4
admin4
Ce script va supprimer tous les enregistrements dont le nom est "admin2", "admin4", sans en laisser un.
admin1
admin3
Alors que je pense que tu voudrais
admin1
admin2
admin3
admin4
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphanteau du PHP | 29 Messages

19 déc. 2007, 16:53

bah je ne sais pas comment je vais faire... je suis pas un as en sql et php !!
bon bah v me debrouiller .
Merci

ViPHP
ViPHP | 2291 Messages

19 déc. 2007, 18:08

bah je ne sais pas comment je vais faire... je suis pas un as en sql et php !!
bon bah v me debrouiller .
Merci
Peut être :?: une aide supplémentaire ICI :wink: