Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1276 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SQL] "Insert into" et gestion des duplicata?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[SQL] "Insert into" et gestion des duplicata?

n°1763513
boudzan200​8
Posté le 23-07-2008 à 06:24:19  profilanswer
 

Bonjour à tous et tout d'abord bonne journée à vous!
Est-il possible d'utiliser "INSERT INTO" sans avoir d'interruption de la requête à cause d'une erreur de duplicata?
En fait, je voudrais que la requête suive son cours même lorsqu'elle rencontre un duplicata, sachant qu'elle ne doit pas écraser les duplicata.
 
Je ne sais absolument pas comment m'y prendre pour gérer ce problème, malgré mes recherches.
 
Voici mon code qui génère l'erreur de duplicata:
 
<?php
mysql_select_db($database_ConnexionBASE, $ConnexionBASE);
$query_rsSaveObservations = "INSERT INTO observations (date, c_nom, commentaires, p_nom) SELECT date, c_nom, commentaires, p_nom FROM reunion";
$rsSaveObservations = mysql_query($query_rsSaveObservations, $ConnexionBASE) or die(mysql_error());
?>
 
La clé primaire de la table 'observations' est composée des champs 'c_nom' et 'p_nom'. Le duplicata relève de la répétition du couple ('c_nom - p_nom') dans ma table 'observations'.
Peut-on faire un truc du genre: Si le couple 'c_nom - p_nom' existe déjà, n'insère pas les enregistrements qui génère un duplicata mais insère les autres???
Ou encore mieux: à chaque fois que tu rencontres un duplicata laisse tomber l'enregistrement qui le génère, mais insère les autres. :??:

mood
Publicité
Posté le 23-07-2008 à 06:24:19  profilanswer
 

n°1763519
sankukai8
Posté le 23-07-2008 à 08:13:36  profilanswer
 

mysql>
 INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=c+1;

n°1763540
vttman2
Je suis Open ...
Posté le 23-07-2008 à 09:05:58  profilanswer
 

Essaie ceci
Le principe : j'insère si l'enregistrement n'existe pas ;-)
 
 
INSERT INTO observations  
 (date, c_nom, commentaires, p_nom)  
SELECT  
 r.date,  
 r.c_nom,  
 r.commentaires,  
 r.p_nom  
FROM reunion r
where not exists  
(select 'NobodyLoveMe' from observations o
where  
 o.date = r.date
 and o.c_nom = r.c_nom  
 and o.commentaires =  r.commentaires
 and o.p_nom = r.p_nom)
 


Message édité par vttman2 le 23-07-2008 à 09:06:20

---------------
il n'y a pas que le VTT dans la vie, il y a le Snowboard aussi ...
n°1763544
vttman2
Je suis Open ...
Posté le 23-07-2008 à 09:09:13  profilanswer
 

sankukai8 si ça ça marche !?
 
... c'est que je viens d'apprendre quelquechose ce matin ;-)


---------------
il n'y a pas que le VTT dans la vie, il y a le Snowboard aussi ...
n°1763547
sankukai8
Posté le 23-07-2008 à 09:19:54  profilanswer
 

vttman2 a écrit :

sankukai8 si ça ça marche !?
 
... c'est que je viens d'apprendre quelquechose ce matin ;-)


 
ben vi ca marche, je l'utilise regulierement avec Mysql 5
 
regarde la:
 
http://dev.mysql.com/doc/refman/5.0/fr/insert.html


Message édité par sankukai8 le 23-07-2008 à 09:21:13
n°1763550
vttman2
Je suis Open ...
Posté le 23-07-2008 à 09:28:37  profilanswer
 

Eh sankukai8, je mettais vraiment pas en doute
tes propos !
 
je connaissais pas c'est tout ...
 
 


---------------
il n'y a pas que le VTT dans la vie, il y a le Snowboard aussi ...
n°1763552
sankukai8
Posté le 23-07-2008 à 09:30:41  profilanswer
 

vttman2 a écrit :

Eh sankukai8, je mettais vraiment pas en doute
tes propos !
 
je connaissais pas c'est tout ...
 
 


pas de pb

n°1763875
boudzan200​8
Posté le 23-07-2008 à 19:44:14  profilanswer
 


Merci sankukai8 et vttman2 pour votre aide, j'adapte et je test. :)  
Je vais commencer avec la solution de sankukai8.
Celle de vttman2 paraît mieux correspondre à mes besoins ("principe : j'insère si l'enregistrement n'existe pas " ), mais je ne comprends pas à quoi correspond 'NobodyLoveMe'.
Pourrais-tu m'éclairer s'il te plait?

n°1763885
esox_ch
Posté le 23-07-2008 à 20:20:55  profilanswer
 

Il a mis un texte au bolle, comme "foobar"

n°1763985
stef_dober​mann
Personne n'est parfait ...
Posté le 24-07-2008 à 09:30:23  profilanswer
 

Bonjour,
Puisque tu travail en PHP, fait un contrôle en PHP.
Fait d'abord un select count(*) as exist from observation where c_nom ='ta valeur1' and p_nom='ta valeur2'
 
et ensuite tu test si exist et = 0.
Si oui tu insert sinon l'enregistrement existe déjà.
 
Mais après avoir lu le poste de sankukai8, il est vrai que dans le cas d'une utilisation de MySQL cela parait sympas.


---------------
Tout à commencé par un rêve...
mood
Publicité
Posté le 24-07-2008 à 09:30:23  profilanswer
 

n°1764200
HappyHarry
Posté le 24-07-2008 à 13:29:01  profilanswer
 

stef_dobermann a écrit :

Bonjour,
Puisque tu travail en PHP, fait un contrôle en PHP.
Fait d'abord un select count(*) as exist from observation where c_nom ='ta valeur1' and p_nom='ta valeur2'
 
et ensuite tu test si exist et = 0.
Si oui tu insert sinon l'enregistrement existe déjà.
 


 
ce qui implique que tu as correctement transactionné le tout et que tu t'assures que personne n'est allé insérer une telle ligne dans ta table entre ton check et ton insert ...
 
c'est à la bdd de faire ça de manière générale, la contrainte est sur ton modèle ...

n°1764904
boudzan200​8
Posté le 25-07-2008 à 15:18:55  profilanswer
 

HappyHarry a écrit :


 
ce qui implique que tu as correctement transactionné le tout et que tu t'assures que personne n'est allé insérer une telle ligne dans ta table entre ton check et ton insert ...
 
c'est à la bdd de faire ça de manière générale, la contrainte est sur ton modèle ...


Bonjour  :hello:  
Merci à tous pour votre aide précieuse, j'ai finalement réussi à utiliser la solution de sankukai8. :D  
A bientôt sur le forum :jap:  
 
PS:Comment fait-on pour marquer le sujet comme résolu?


Message édité par boudzan2008 le 25-07-2008 à 15:20:16

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SQL] "Insert into" et gestion des duplicata?

 

Sujets relatifs
Problème : Requetes SQL Serveur liés à Access[SQL] Choix d'un bon Query Browser
Comparer deux fichiers DTS SQL Server 2000[JSP/SQL] insert dans un BLOB
[Resolu] asp.net/C#/SQl server2005 affichage resultats rechercheexport table SQL vers fichier
[PHP/SQL] Mettre à jour des données dans un tableau arraycondition where : recherche par mot clé
[SQL Server] Outrepasser la limite des 8000 bytes pour OpenQuery 
Plus de sujets relatifs à : [SQL] "Insert into" et gestion des duplicata?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR