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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [RESOLU] insert/update ifnull/ifnotnull

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[RESOLU] insert/update ifnull/ifnotnull

n°2100364
XP-1000
Dovakhin !
Posté le 08-09-2011 à 14:55:08  profilanswer
 

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 ?
mood
Publicité
Posté le 08-09-2011 à 14:55:08  profilanswer
 

n°2100520
Oliiii
Posté le 09-09-2011 à 09:18:39  profilanswer
 

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).

n°2100522
XP-1000
Dovakhin !
Posté le 09-09-2011 à 09:30:32  profilanswer
 

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


---------------
Pourquoi linux est meilleur ?
n°2100523
Oliiii
Posté le 09-09-2011 à 09:34:37  profilanswer
 

Je ne connais pas bien MySQL, mais il devrai y avoir un test avec le nombre de row mise a jour.

n°2100554
furie gast​rique
Posté le 09-09-2011 à 11:44:16  profilanswer
 

Code :
  1. IF @var IS NULL
  2. BEGIN
  3.  INSERT <...>
  4. END
  5. ELSE
  6. BEGIN
  7.  UPDATE <...>
  8. END

Message cité 1 fois
Message édité par furie gastrique le 09-09-2011 à 11:44:29
n°2100570
XP-1000
Dovakhin !
Posté le 09-09-2011 à 13:15:38  profilanswer
 

furie gastrique a écrit :

Code :
  1. IF @var IS NULL
  2. BEGIN
  3.  INSERT <...>
  4. END
  5. ELSE
  6. BEGIN
  7.  UPDATE <...>
  8. END



 
Merci pour votre réponse,  
j'ai créé un script :

Code :
  1. set @var:=null;
  2. IF @var IS NULL
  3. BEGIN
  4. SELECT * FROM TABLE1;
  5. END
  6. ELSE
  7. BEGIN
  8. SELECT * FROM TABLE2;
  9. END


 
et à priori mon sgbd ne gère pas ce genre de strucure :
 

Spoiler :

source test.sql
Query OK, 0 rows affected (0.00 sec)
 
ERROR 1064 (42000): 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 'IF @var IS NULL
BEGIN
select * from BV_FORMULA' at line 1
ERROR 1064 (42000): 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 'END
ELSE
BEGIN
SELECT * FROM BV_GFX' at line 1
ERROR 1064 (42000): 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 'END' at line 1



---------------
Pourquoi linux est meilleur ?
n°2100571
furie gast​rique
Posté le 09-09-2011 à 13:20:53  profilanswer
 

La structure est un peu différente en MySQL, en effet: http://dev.mysql.com/doc/refman/5. [...] ement.html


Message édité par furie gastrique le 09-09-2011 à 13:21:04
n°2100585
XP-1000
Dovakhin !
Posté le 09-09-2011 à 14:12:26  profilanswer
 

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


Message édité par XP-1000 le 09-09-2011 à 14:13:51

---------------
Pourquoi linux est meilleur ?
n°2100590
XP-1000
Dovakhin !
Posté le 09-09-2011 à 14:37:18  profilanswer
 

Alors ca, ca fonctionne :  

Code :
  1. DELIMITER //
  2. CREATE FUNCTION SimpleCompare(n INT, m INT)
  3.   RETURNS VARCHAR(20)
  4.   BEGIN
  5.     DECLARE s VARCHAR(20);
  6.     IF n > m THEN SET s = '>';
  7.     ELSEIF n = m THEN SET s = '=';
  8.     ELSE SET s = '<';
  9.     END IF;
  10.     SET s = CONCAT(n, ' ', s, ' ', m);
  11.     RETURN s;
  12.   END //
  13. DELIMITER ;


 
Mais impossible de faire ca, si ce n'est pas dans une fonction.


---------------
Pourquoi linux est meilleur ?
n°2100595
furie gast​rique
Posté le 09-09-2011 à 14:57:15  profilanswer
 

Ou dans une procédure stockée.

mood
Publicité
Posté le 09-09-2011 à 14:57:15  profilanswer
 

n°2100618
XP-1000
Dovakhin !
Posté le 09-09-2011 à 16:23:47  profilanswer
 

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 ..


---------------
Pourquoi linux est meilleur ?
n°2100622
furie gast​rique
Posté le 09-09-2011 à 16:33:07  profilanswer
 

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.

n°2100627
XP-1000
Dovakhin !
Posté le 09-09-2011 à 16:47:06  profilanswer
 

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 ..


---------------
Pourquoi linux est meilleur ?
n°2100936
Oliiii
Posté le 12-09-2011 à 09:39:57  profilanswer
 

Un bete script qui fait ca ne marche pas? :

Code :
  1. UPDATE truc SET A = 1 WHERE B = 2
  2. IF ROW_COUNT() = 0 THEN
  3. INSERT truc (A,B) VALUES (1,2)
  4. END IF

n°2102198
XP-1000
Dovakhin !
Posté le 19-09-2011 à 13:52:39  profilanswer
 

Bonjour,
Désolé pour la longue absence.
Non cela ne fonctionne pas : erreur sql syntax


---------------
Pourquoi linux est meilleur ?
n°2102319
mrbebert
Posté le 19-09-2011 à 21:14:04  profilanswer
 

Peut être avec la fonction "REPLACE" ?
Si l'id existe, la ligne sera mise à jour. Sinon, il y aura insertion.


---------------
Doucement le matin, pas trop vite le soir.
n°2103060
XP-1000
Dovakhin !
Posté le 23-09-2011 à 14:27:00  profilanswer
 

mrbebert a écrit :

Peut être avec la fonction "REPLACE" ?
Si l'id existe, la ligne sera mise à jour. Sinon, il y aura insertion.


Alors là, grand merci !
premièrement : Ca fonctionne parfaitement
deuxièmement : Ca demande pratiquement aucune modification à mes scripts
 
Merci beaucoup :D


---------------
Pourquoi linux est meilleur ?

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

  [RESOLU] insert/update ifnull/ifnotnull

 

Sujets relatifs
Demande d'aide : Manipulation de fichier texte en .csvSlider plein ecran - probleme IE - besoin d'aide
Création page web avec update automatique du contenuBesoin d'aide pour un SELECT multitables
EXCEL besoin d'aide pour graphique SVP [resolut]Aide pour compilation Webpart Sharepoint 2010
[MySQL ]Problème sur ON DUPLICATE KEY UPDATETrigger sur un update
Besoin d'aide logiciel VB.net (pour étiquettes d'adresses postales)Meilleur logiciel pour création site Web
Plus de sujets relatifs à : [RESOLU] insert/update ifnull/ifnotnull


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