insert/update ifnull/ifnotnull [RESOLU] - SQL/NoSQL - Programmation
Marsh Posté le 09-09-2011 à 09:18:39
Le plus facil est de faire un update, si le nombre de lignes mise a jour est 0 faire un insert.
Pas besoin de transactions et pas de risque de deadlock.
Il y a peut etre moye nde le faire en une fois mais ca depend du SGBD (en SQL server il y a le MERGE).
Marsh Posté le 09-09-2011 à 09:30:32
merci pour votre réponse,
j'utilise mysql (5.5 je crois)
Ca me paraît bien comme solution mais
comment mettez vous en place la condition : if 0 row update => insert ?
merci d'avance
Marsh Posté le 09-09-2011 à 09:34:37
Je ne connais pas bien MySQL, mais il devrai y avoir un test avec le nombre de row mise a jour.
Marsh Posté le 09-09-2011 à 11:44:16
Code :
|
Marsh Posté le 09-09-2011 à 13:15:38
furie gastrique a écrit :
|
Merci pour votre réponse,
j'ai créé un script :
Code :
|
et à priori mon sgbd ne gère pas ce genre de strucure :
Spoiler : source test.sql |
Marsh Posté le 09-09-2011 à 13:20:53
La structure est un peu différente en MySQL, en effet: http://dev.mysql.com/doc/refman/5. [...] ement.html
Marsh Posté le 09-09-2011 à 14:12:26
merci pour le lien, je viens de tenter un simple :
set @var:=1;
IF @var=1 then select * from TABLE
END IF
mais ca ne fonctionne pas non plus
Marsh Posté le 09-09-2011 à 14:37:18
Alors ca, ca fonctionne :
Code :
|
Mais impossible de faire ca, si ce n'est pas dans une fonction.
Marsh Posté le 09-09-2011 à 16:23:47
oui mais ca ne m'interesse vraiment pas une procédure stocké car j'ai besoin de cette structure pour d'innombrables requêtes totalement différentes les unes des autres et si je dois faire une procédure stockée spéciale pour chacune d'entre elle je n'ai pas fini ..
Marsh Posté le 09-09-2011 à 16:33:07
Est-ce que tu es sûr que c'est comme cela que tu dois faire? Si au niveau du langage parent (PHP?), tu sais si la valeur est nulle ou non, tu peux le faire au niveau de PHP.
Marsh Posté le 09-09-2011 à 16:47:06
c'est bien ca le problème,
c'est un script bash qui appelle un script sql.
Il aurait été plus pertinent de le faire en php à la base mais je ne pensais pas qu'il prendrait autant d'ampleur et maintenant que j'ai commencé comme ca ..
Marsh Posté le 12-09-2011 à 09:39:57
Un bete script qui fait ca ne marche pas? :
Code :
|
Marsh Posté le 19-09-2011 à 13:52:39
Bonjour,
Désolé pour la longue absence.
Non cela ne fonctionne pas : erreur sql syntax
Marsh Posté le 19-09-2011 à 21:14:04
Peut être avec la fonction "REPLACE" ?
Si l'id existe, la ligne sera mise à jour. Sinon, il y aura insertion.
Marsh Posté le 23-09-2011 à 14:27:00
mrbebert a écrit : Peut être avec la fonction "REPLACE" ? |
Alors là, grand merci !
premièrement : Ca fonctionne parfaitement
deuxièmement : Ca demande pratiquement aucune modification à mes scripts
Merci beaucoup
Marsh Posté le 08-09-2011 à 14:55:08
Bonjour,
J'aimerais pouvoir faire un insert si une variable est null ou un update si cette dernière n'est pas null.
J'explique :
- je fais un select d'un id dans une variable :
exemple : select @var:=id from TABLE where nom = 'exemple' limit 1;
- à cette étape, on est d'accord pour dire que @var est null si aucun champs 'nom' dans la table 'TABLE' n'est égal à 'exemple' mais qu'il prend l'id du champs si celui-ci existe.
A partir de là, je peux maintenant faire une update si @var n'est pas null avec comme id @var ou je peux faire un insert si @ est null.
Seulement, la fontion ifnull m'est inutile ici puisqu'elle ne permet que dans remplacer la valeur d'un champs si celui-ci est null.
En gros j'aimerais pouvoir faire quelque chose du genre :
1. select @var:=id from TABLE where nom = 'exemple' limit 1;
2. ifnull(@var,insert ...., update)
avec comme structure : ifnull (expression à évaluer, action si c'est null, action si ce n'est pas null)
J'espère m'être bien expliqué, si ce n'est pas le cas dites le moi.
Merci d'avance pour vos réponses
Message édité par XP-1000 le 23-09-2011 à 14:27:18
---------------
Pourquoi linux est meilleur ?