insert into avec condition

insert into avec condition - SQL/NoSQL - Programmation

Marsh Posté le 21-04-2016 à 12:01:16    

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.

Reply

Marsh Posté le 21-04-2016 à 12:01:16   

Reply

Marsh Posté le 21-04-2016 à 12:05:44    

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


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

Reply

Marsh Posté le 21-04-2016 à 13:18:18    

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.
 

Reply

Marsh Posté le 21-04-2016 à 16:07:45    

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

Reply

Marsh Posté le 21-04-2016 à 16:15:46    

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

Reply

Marsh Posté le 21-04-2016 à 18:36:13    

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

Reply

Marsh Posté le 21-04-2016 à 18:40:38    

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
Reply

Marsh Posté le 22-04-2016 à 08:47:56    

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

Reply

Marsh Posté le 22-04-2016 à 09:43:51    

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
Reply

Marsh Posté le 22-04-2016 à 10:04:07    

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

Reply

Marsh Posté le 22-04-2016 à 10:04:07   

Reply

Marsh Posté le 22-04-2016 à 10:22:03    

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

Reply

Marsh Posté le 22-04-2016 à 10:31:44    

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

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed