Page 1 sur 2

suppresion des doublons.

Posté : 19 déc. 2007, 11:05
par cy4nur3
Bonjour, je souhaiterai supprimer les doublons dans ma base de donnée.
voila ce que j'ai comme requete:

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 )
le problème c'est que cela ne marche pas...
Merci a vous tous

Posté : 19 déc. 2007, 11:12
par zeus
Modération :
cy4nur3, afin d'améliorer la lisibilité de ton message,
pense à utiliser les balises [code] ou [php] (selon le langage utilisé).

Elles sont disponibles au-dessus de la zone de saisie de ton message
lorsque tu postes un nouveau message.

Des indications sont disponibles sur la manière de mettre en forme vos messages dans la FAQ


De plus, ça ne marche pas ne nous est d'aucune aide. Il faudrait préciser ce qui ne fonctionne pas

Posté : 19 déc. 2007, 11:17
par cy4nur3
lorsque je veux supprimer mes doublons je le fais a la main. C'est a dire que je me connecte a phpmyadmin ensuite je clique sql et je lance cet requete:

Code : Tout sélectionner

SELECT `admin_nom` FROM `calcul` GROUP BY `admin_nom` HAVING COUNT( `admin_nom` ) >1
et ensuite je selectionne et je les supprime une par une.

Maintenant ce que je voudrais faire c'est que ca soit automatique!! C'est a dire que sur mon site web je créé un lien pour me faire ca mais automatiquement. J'ai juste a cliquer sur "supprimeré mais je n'arrive pas a construire ma requete.
Merci de m'aider.

Posté : 19 déc. 2007, 11:31
par Hubert Roksor
Cher cy4nur3,

Revoyons ensemble les règles spécifiques du forum SQL
Rappel pratique - n'oubliez pas de :
  1. suivre ces quelques conseils de débogage
  2. préciser quel SGBD vous utilisez ainsi que sa version
  3. utiliser les balises

    Code : Tout sélectionner

    [/i] et [i]
    [/i] pour afficher vos requêtes SQL
  4. poster le schéma des tables pertinentes à votre requête sous la forme d'une instruction "CREATE TABLE" (fonction "Exporter" de phpMyAdmin)
  5. si nécessaire, poster un échantillon des données
Attention, suivre ces consignes est obligatoire. Merci de les lire attentivement.
  1. pas fait
  2. pas indiqué
  3. pas fait
  4. pas fait
  5. pas fait
Ce n'est pas brilliant, mais jetons quand même un œil sur les règlements généraux, tiré du sujet LISEZ-MOI - Règlements généraux
4. Veuillez prendre la peine de créer un message clair et concis.
Utilisez systématiquement les balises
[/b] (pour vos sources PHP) et [b][code][/b] (pour tout autre forme de code) afin de rendre l'affichage de votre code lisible et compréhensible par tous.
De plus, prenez le temps de bien rédiger votre message afin d'y inclure le plus de détails possibles (message d’erreur obtenus, configuration, …).
Si votre message contient la phrase "ça marche pas", vous risquez d'être banni des forums pour une durée indéterminée.
Question précise, réponse précise ! L'inverse est aussi valable : Question de mer**, réponse de mer**.[/quote]
Merci, a+

Posté : 19 déc. 2007, 11:35
par cy4nur3
1 - Maintenant c'est fait ;p
2 - Mysql 4.1.7
3 - Je l'ai fait sur le précedent post
4 - voici ma table :

Code : Tout sélectionner

CREATE TABLE IF NOT EXISTS `calcul` ( `admin_nom` varchar(10) NOT NULL default '', `total` varchar(10) NOT NULL default '' ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Cordialement,

Posté : 19 déc. 2007, 12:43
par zeus
La 1ere requête que tu nous as fourni, elle fait quoi ?
Elle échoue, elle ne supprime rien ?

Le select que tu nous donnes en exemple retourne bien des données actuellement ?

Posté : 19 déc. 2007, 12:47
par cy4nur3
la premiere requete fonctionne tres bien. Elle me donne le nom des personnes qui sont en double et apres je dois selectionner les champs et apres les supprimer dans phpmyadmin.
Moi ce qu eje veux c'est faire ca en php. je clique sur un bouton et hop ca supprime les doublons.
Merci

Posté : 19 déc. 2007, 13:00
par Truc
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"...

Posté : 19 déc. 2007, 13:02
par Berzemus
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.

Posté : 19 déc. 2007, 13:02
par zeus
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.

Posté : 19 déc. 2007, 13:06
par cy4nur3
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

Posté : 19 déc. 2007, 13:08
par zeus
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

Posté : 19 déc. 2007, 14:47
par cy4nur3
le delete ne fontionne pas il me mets une erreur !!

Posté : 19 déc. 2007, 15:15
par ouckileou
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]

Posté : 19 déc. 2007, 15:20
par cy4nur3
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]