Page 1 sur 1

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

Posté : 28 avr. 2015, 14:57
par tjoce05
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:

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

Posté : 28 avr. 2015, 15:08
par Saian
Et bien fais 3 requêtes non ?

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

Posté : 28 avr. 2015, 15:20
par tjoce05
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.

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

Posté : 28 avr. 2015, 15:21
par PortgasDKiba
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 !

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

Posté : 28 avr. 2015, 15:25
par Saian
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.

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

Posté : 28 avr. 2015, 16:00
par tjoce05

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.

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

Posté : 28 avr. 2015, 16:22
par Saian
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]));