4 votes

insertion d'un tableau dans une table de base de données en une seule requête

J'ai un tableau d'éléments comme

[item1,itmem2,item3] ;

Je dois insérer ces éléments à un userId particulier :

Les résultats finaux ressemblent à ceci

UserId ItemId

2   ||  item1 
2   ||  item2
2   ||  item3

Actuellement, je boucle dans le tableau en code php et j'insère chaque élément un par un, par ex.

foreach($items as $item)
{
insert into items (UserId,ItemId) value  (2,$item);
}

Est-il possible d'insérer toutes les entrées dans une seule requête ?

6voto

Mark Byers Points 318575

Oui, votre requête pourrait ressembler à ça :

INSERT INTO items (UserId,ItemId)
VALUES
(2, 'item1'),
(2, 'item2'),
(2, 'item3');

Vous pouvez construire cette chaîne en PHP.

2voto

VAC-Prabhu Points 982
// Prepare the items to be inserted
foreach($items as $item)
{
   $sString .= '(2,' . $item.'),';
}

// Remove the last char comma from the built string
$sString = substr($sString,0,-1);

$sqlQuery = "INSERT INTO items (UserId,ItemId) VALUES" . $sString;
mysql\_query($sqlQuery);

2voto

Damon Skelhorn Points 1036

Implode est parfait pour cela

foreach($items as $item){
   $items[] = '(2,' . $item.')';
}

$q = "INSERT INTO items (userID, itemID) VALUES " . implode(', ', $items);
mysql_query($q);

Voir - http://php.net/manual/en/function.implode.php

1voto

Maxem Points 1770

Vous pouvez préconstruire la requête comme suit :

$query = "";
foreach($items as $item)
{
  $query .= "insert into items (UserId,ItemId) value  (2,$item);";
}

La plupart des bases de données vous permettent d'émettre plusieurs commandes si vous les séparez par un point-virgule.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X