"Insert into" et gestion des duplicata? [SQL] - SQL/NoSQL - Programmation
Marsh Posté le 23-07-2008 à 08:13:36
mysql>
INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=c+1;
Marsh Posté le 23-07-2008 à 09:05:58
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)
Marsh Posté le 23-07-2008 à 09:09:13
sankukai8 si ça ça marche !?
... c'est que je viens d'apprendre quelquechose ce matin ;-)
Marsh Posté le 23-07-2008 à 09:19:54
vttman2 a écrit : sankukai8 si ça ça marche !? |
ben vi ca marche, je l'utilise regulierement avec Mysql 5
regarde la:
http://dev.mysql.com/doc/refman/5.0/fr/insert.html
Marsh Posté le 23-07-2008 à 09:28:37
Eh sankukai8, je mettais vraiment pas en doute
tes propos !
je connaissais pas c'est tout ...
Marsh Posté le 23-07-2008 à 09:30:41
vttman2 a écrit : Eh sankukai8, je mettais vraiment pas en doute |
pas de pb
Marsh Posté le 23-07-2008 à 19:44:14
sankukai8 a écrit : |
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?
Marsh Posté le 24-07-2008 à 09:30:23
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.
Marsh Posté le 24-07-2008 à 13:29:01
stef_dobermann a écrit : Bonjour, |
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 ...
Marsh Posté le 25-07-2008 à 15:18:55
HappyHarry a écrit : |
Bonjour
Merci à tous pour votre aide précieuse, j'ai finalement réussi à utiliser la solution de sankukai8.
A bientôt sur le forum
PS:Comment fait-on pour marquer le sujet comme résolu?
Marsh Posté le 23-07-2008 à 06:24:19
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.