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 !

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]));