Insérer dans la base de données plusieurs tableaux via une boucle

Eléphanteau du PHP | 21 Messages

28 avr. 2015, 14:57

Bonjour,

Comment insérer dans la bdd ces 3 tableaux :

Code : Tout sélectionner

Array ( [0] => 1 [1] => 10 [2] => 30 ) Array ( [0] => 2 [1] => 20 [2] => 35 ) Array ( [0] => 1 [1] => 20 [2] => 35 )
key [0] correspond au champ "weight_min"
key [1] correspond au champ "weight_max"
key [2] correspond au champ "price"

le requete

Code : Tout sélectionner

$sql = $db->prepare("INSERT INTO ".$_SESSION["table"]." ( weight_min, weight_max, price ) VALUES (:weight_min, :weight_max, :price) ");
merci d'avance ! :roll:

Avatar du membre
Mammouth du PHP | 1609 Messages

28 avr. 2015, 15:08

Et bien fais 3 requêtes non ?
Développeur web depuis + de 20 ans

Eléphanteau du PHP | 21 Messages

28 avr. 2015, 15:20

Oui, j'ai pensé aux 3 requêtes mais est-ce que cela ne risque pas de ralentir la BDD ? Existe-t-il une méthode pour ne faire q'une seule requête dans une boucle, ou alors fusionner les arrays pour ne faire qu'une requête, j'ai tenté mais ça ne marche pas.

Eléphanteau du PHP | 36 Messages

28 avr. 2015, 15:21

Tu peux nous en dire plus sur la manière dont tu récupères les valeurs dans ton tableau ?

Avec une boucle sur ton tableau je pense.

Un foreach devrait faire l'affaire !

Avatar du membre
Mammouth du PHP | 1609 Messages

28 avr. 2015, 15:25

Tu peux écrire la requête comme ça :
INSERT INTO <table_name> ( Column1, Column2 )
VALUES ( Value1, Value2 ), ( Value3, Value4 )

Et oui ça a un impact sur le temps d'exécution mais entre une requête qui insère 3 lignes et 3 requêtes qui insèrent une ligne l'écart doit être vraiment minime. Il faut certainement beaucoup plus de requêtes pour voir une différence.
Développeur web depuis + de 20 ans

Eléphanteau du PHP | 21 Messages

28 avr. 2015, 16:00

Code : Tout sélectionner

foreach($weight_min as $key_weight_min => $weight_min_value) { echo "<p>weight_min: [".$key_weight_min."]".$weight_min_value."</p>"; foreach( $weight_max as $key_weight_max => $weight_max_value ){ echo "<p>weight_max: [".$key_weight_max."]".$weight_max_value."</p>"; foreach( $price as $key_price => $price_value ){ echo "price: [".$key_price."]".$price_value."<br />"; }}}
Les tableaux sont générés automatiquement via jquery avec appendTo(). Leur nombre est illimité. Je les récupère dans un fichier PHP à l'aide d'Ajax. Puis je dois les insérer dans ma table avec une boucle. À l'instant où je vous envoie ce mail, je pense à une autre soluss, ne faudrait-il pas compter d'abord le nombre de tableaux généré automatiquement dans la boucle, puis répété n fois l'insertion dans une boucle for.

Avatar du membre
Mammouth du PHP | 1609 Messages

28 avr. 2015, 16:22

En admettant que $arrays contienne tous les tableaux il suffit de faire quelque chose dans le style :
$sql = $db->prepare('INSERT INTO '.$_SESSION['table'].' (weight_min, weight_max, price) VALUES (:weight_min, :weight_max, :price)');

foreach($arrays as $array)
    $sql->execute(array(
        ':weight_min' => $array[0], 
        ':weight_max' => $array[1], 
        ':price' => $array[2]));
Développeur web depuis + de 20 ans