suppresion des doublons.

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : suppresion des doublons.

par dunbar » 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:

par cy4nur3 » 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

par zeus » 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

par cy4nur3 » 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

par zeus » 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

par cy4nur3 » 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

par zeus » 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 ;)

par cy4nur3 » 19 déc. 2007, 15:20

voici le message d'erreur:

Erreur

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
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IN
(
SELECT `admin_nom`
FROM `calcul`
GROUP BY `admin_nom`
HAVING COUNT( `a' at line 3[/code]

par ouckileou » 19 déc. 2007, 15:15

le delete ne fontionne pas il me mets une erreur !!
Et tu vas la donner quand cette erreur ? Hubert Roksor t'a rappelé les règlements, tu peux les lire et les suivre stp histoire que personne ne perde du temps à essayer de deviner

Modération :
cy4nur3, afin d'obtenir une réponse sur ce forum, il est indispensable de :

- Préciser quel est le SGBD utilisé ainsi que sa Version
- Poster la Structure des Tables utilisées dans la requête sous la forme d'un "CREATE TABLE ..." :!:
(Vous pouvez exporter la structure d'une table via phpMyAdmin. Retirez les colonnes inutiles)
- Indiquer le message d'erreur SQL le cas échéant.

Pensez à utiliser les balises

Code : Tout sélectionner

pour afficher les requêtes SQL, la Structure des Tables et si nécessaire un échantillon des données. Assurez vous également d'avoir suivi ces [url=http://www.phpfrance.com/forums/voir_sujet-19378.php]conseils de débogage[/url]. [/color]

par cy4nur3 » 19 déc. 2007, 14:47

le delete ne fontionne pas il me mets une erreur !!

par zeus » 19 déc. 2007, 13:08

La 1ere requête que tu nous as fourni, elle fait quoi ?
Elle échoue, elle ne supprime rien ?
Je parlais bien sûr du delete

par cy4nur3 » 19 déc. 2007, 13:06

la requete delete ne fonctionne pas .. je ne sais pas trop pourqoui.
Une fois que j'ai la requete qui permete de supprimer le doublons je peux me debrouiller en php.
C'est jsute cette requete qui me donne du fils a retordre...

Merci

par zeus » 19 déc. 2007, 13:02

Quel est ton problème exact ?
- écrire une requête qui réalise ce traitement de dédoublonnage ?
- a partir d'une requête qui fonctionne, lancer le traitement via une page PHP

Dans le 1er cas : dit nous si l'exemple de DELETE que tu nous donnes fonctione

Dans le 2nd cas : il suffit d'écrire un script PHP qui exécute la requête DELETE et d'appeler ce script pour que le traitement se fasse tout seul.


Ne prend pas ça pour un acharnement, mais un problème bien décrit est résolu à 80%.
Nous en sommes à une 10aines de messages pour ne toujours pas savoir ce que tu veux faire.

par Berzemus » 19 déc. 2007, 13:02

je te dirais de regarder la requête que phpmyadmin effectue pour supprimer le résultat
(puisque, finalement, tu ne fais que générer une requête à travers phpmyadmin, qui l'affiche alors bien volontiers)

Ainsi, tu auras déjà une piste.

par Truc » 19 déc. 2007, 13:00

Sans donner de vraie réponse au sujet... apparemment c'est une opération que tu auras à effectuer à plusieurs reprises (vu que tu veux un bouton bla bla...)

Est-ce qu'il ne serait pas plus judicieux d'éviter d'insérer des doublons ?
requête avant insertion, champ en "unique"...