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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  insert into avec condition

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

insert into avec condition

n°2279889
malhek69
Posté le 21-04-2016 à 12:01:16  profilanswer
 

Bonjour à tous et merci de l'intérêt que vous portez à mon problème !  
 
Bon je bosse avec une BDD mysql, j'essaye de faire un insert into avec une condition qui changerait la valeur inséré. pour le moment j'ai pondu ça, mais comme je m'en foutais c'est faux ^^Quelqu'un aurait une idée??
 

Code :
  1. $sql= "INSERT INTO forfaits (forfaits.forfait, forfaits.forfaits_id, forfaits.prefixe, forfaits.destination_name, forfaits.connection, forfaits.prix_minute)".
  2.       " CASE WHEN forfaits.destination_name = 'France Fixe' then 'forfaits.prix_minute='0'".
  3.      " WHEN forfaits.destination_name = 'France Mobile' then 'forfaits.prix_minute='0'".
  4.      "ELSE VALUES ('Illimite France fixe et Mobile', '1', '$prefix', '$nomdestination', '$miseenrelation'*1.3, '$tarifminute'*1.3)";


 
Merci à tous pour l'aide apportée.
 
Et bonne journée sous ces chaleurs.

mood
Publicité
Posté le 21-04-2016 à 12:01:16  profilanswer
 

n°2279890
flo850
moi je
Posté le 21-04-2016 à 12:05:44  profilanswer
 

regarde plutôt du coté des trigger, ils peuvent s'excuter avant l'insertion et modifier des valeurs


---------------

n°2279897
antac
..
Posté le 21-04-2016 à 13:18:18  profilanswer
 

malhek69 a écrit :

Bonjour à tous et merci de l'intérêt que vous portez à mon problème !  
 
Bon je bosse avec une BDD mysql, j'essaye de faire un insert into avec une condition qui changerait la valeur inséré. pour le moment j'ai pondu ça, mais comme je m'en foutais c'est faux ^^Quelqu'un aurait une idée??
 

Code :
  1. $sql= "INSERT INTO forfaits (forfaits.forfait, forfaits.forfaits_id, forfaits.prefixe, forfaits.destination_name, forfaits.connection, forfaits.prix_minute)".
  2.       " CASE WHEN forfaits.destination_name = 'France Fixe' then 'forfaits.prix_minute='0'".
  3.      " WHEN forfaits.destination_name = 'France Mobile' then 'forfaits.prix_minute='0'".
  4.      "ELSE VALUES ('Illimite France fixe et Mobile', '1', '$prefix', '$nomdestination', '$miseenrelation'*1.3, '$tarifminute'*1.3)";


 
Merci à tous pour l'aide apportée.
 
Et bonne journée sous ces chaleurs.


 

Code :
  1. "INSERT INTO forfaits
  2.    (
  3.     forfaits.forfait,
  4.     forfaits.forfaits_id,
  5.     forfaits.prefixe,
  6.     forfaits.destination_name,
  7.     forfaits.connection,
  8.     forfaits.prix_minute
  9.    )
  10.           VALUES
  11.    (
  12.     'Illimite France fixe et Mobile',
  13.     1,
  14.     '$prefix',
  15.     '$nomdestination'
  16.     '$miseenrelation'*1.3,
  17.     '$tarifminute'*1.3,
  18.     ".((($nomdestination=='France Fixe') ||($nomdestination=='France Mobile')) ?0:$tarifminute*1.3)."
  19.    )";


 
Le trigger ne pourrait être une solution que si le tarif minute est dans la BDD (ce qui te permettrait de le retrouver) mais dans ce cas, ta base ne serait pas optimisée et ne respecterait pas les standards.
Sinon pas le choix, faut le fixer dans la requête.
 

n°2279914
malhek69
Posté le 21-04-2016 à 16:07:45  profilanswer
 

Code :
  1. ".((($nomdestination=='France Fixe') ||($nomdestination=='France Mobile')) ?0:$tarifminute*1.3)."
  2.    )";


 
Je ne comprends pas cette ligne.. cela veut-il dire en gros si nomdestination==France Fixe ou France mobile tu mets 0 sinon tu calcules tarifminute*1,3 ???  
 
Je ne connais pas cette syntaxe..
Mais merci beaucoup de ta réponse

n°2279915
malhek69
Posté le 21-04-2016 à 16:15:46  profilanswer
 

et voilà l'erreur que ça me fait:  
 
Erreur SQL !<br>INSERT INTO forfaits (forfaits.forfait, forfaits.forfaits_id, forfaits.prefixe, forfaits.destination_name, forfaits.connection, forfaits.prix_minute)VALUES ('Illimite France fixe et Mobile','1','','',''*1.3,''*1.3,0)<br>Column count doesn't match value count at row 1

n°2279925
antac
..
Posté le 21-04-2016 à 18:36:13  profilanswer
 

malhek69 a écrit :

Code :
  1. ".((($nomdestination=='France Fixe') ||($nomdestination=='France Mobile')) ?0:$tarifminute*1.3)."
  2.    )";


 
Je ne comprends pas cette ligne.. cela veut-il dire en gros si nomdestination==France Fixe ou France mobile tu mets 0 sinon tu calcules tarifminute*1,3 ???  
 
Je ne connais pas cette syntaxe..
Mais merci beaucoup de ta réponse


 
C'est un IF sous forme ternaire en PHP. Bien pratique parfois

n°2279928
antac
..
Posté le 21-04-2016 à 18:40:38  profilanswer
 

malhek69 a écrit :

et voilà l'erreur que ça me fait:  
 
Erreur SQL !<br>INSERT INTO forfaits (forfaits.forfait, forfaits.forfaits_id, forfaits.prefixe, forfaits.destination_name, forfaits.connection, forfaits.prix_minute)VALUES ('Illimite France fixe et Mobile','1','','',''*1.3,''*1.3,0)<br>Column count doesn't match value count at row 1


 
Cela veut juste dire que tu as plus de colonnes dans VALUES que dans INSERT INTO (ma faute, je ne peux pas tester). En plus, il faut tester le type de données sinon tu multiplies des chaînes de caractères ,ce qui est assez discutable.
 

Code :
  1. "INSERT INTO forfaits
  2.    (
  3.     forfaits.forfait,
  4.     forfaits.forfaits_id,
  5.     forfaits.prefixe,
  6.     forfaits.destination_name,
  7.     forfaits.connection,
  8.     forfaits.prix_minute
  9.    )
  10.           VALUES
  11.    (
  12.     'Illimite France fixe et Mobile',
  13.     1,
  14.     '$prefix',
  15.     '$nomdestination',
  16.     ".floatval($miseenrelation)*1.3.",
  17.     ".((($nomdestination=='France Fixe') ||($nomdestination=='France Mobile')) ?0:floatval($tarifminute)*1.3)."
  18.    )";


Message édité par antac le 22-04-2016 à 10:35:24
n°2279947
malhek69
Posté le 22-04-2016 à 08:47:56  profilanswer
 

Ah oui dans ma BDD j'ai mis tarifminute et miseenrelation en décimal. Je vais peut-être les changer en float même si j'ai jamais bien compris la différence.
En tout cas merci beaucoup je vais tester ça de suite

n°2279950
antac
..
Posté le 22-04-2016 à 09:43:51  profilanswer
 

Decimal : Troncature si ça dépasse la taille (en fait c'est une chaîne de caractère en interne)
 
Float : Arrondi si ça dépasse la taille
 
Quoi qu'il en soit, il faut fixer le type en PHP et surtout ne jamais placer une variable postée dans une requête sans l'avoir typé avant et viré les caractères d'échappements éventuels (éviter une injection SQL).
Par ailleurs, si tu ne fais pas ça et que le nom de la destination contient une apostrophe, ça va crasher.


Message édité par antac le 22-04-2016 à 09:45:00
n°2279954
malhek69
Posté le 22-04-2016 à 10:04:07  profilanswer
 

Toujours une erreur..
Erreur SQL !<br>INSERT INTO forfaits (forfaits.forfait, forfaits.forfaits_id, forfaits.prefixe, forfaits.destination_name, forfaits.connection, forfaits.prix_minute) VALUES( 'Illimite France fixe et Mobile', 1, '', '' 0, 0)<br>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 '0, 0)' at line 1
 
 
Comme s'il n'arrivait plus d'un coup à récupérer les variables $prefix et $nomdestination. Alors que sur la requête précédente et la suivante il y arrive très bien...

mood
Publicité
Posté le 22-04-2016 à 10:04:07  profilanswer
 

n°2279955
antac
..
Posté le 22-04-2016 à 10:22:03  profilanswer
 

Il ta manque une virgule après '$nomdestination'
Après pour le fait que tes variables soient vides, je n'en sais rien

n°2279958
malhek69
Posté le 22-04-2016 à 10:31:44  profilanswer
 

Bon... Je ne ferai aucun commentaire sur ma bêtise.. c'était bien juste la virgule qui manquait..  
Merci infiniment de cette aide et bonne journée ! ! ! !


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

  insert into avec condition

 

Sujets relatifs
copie colle ligne sous conditionmacro impression excel sous condition
Comment bloquer l'INSERT INTO si 2 champs existent déja ?Importer des données de plusieurs fichiers, sous condition
INSERT INTO ne s'effectue pasDiverses questions VBA
[Résolu] [SQL Server/Cobol] Pb alim donnée dans un InsertSuppression des accents [RESOLU]
Plus de sujets relatifs à : insert into avec condition


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