For dans SQL

Fermé
pazdu63 Messages postés 8 Date d'inscription jeudi 15 juin 2017 Statut Membre Dernière intervention 6 avril 2018 - 19 juin 2017 à 10:22
yg_be Messages postés 22719 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 - 23 juin 2017 à 20:41
Bonjour à tous et à toutes,

Je voudrais savoir si c'est possible de faire une boucle for dans une requête SQL exemple: je veux créer 10 commandes dans ma table commandes en utilisant une boucle for pour pas perdre de temps en faisans ligne par ligne avec un insert into quelqu'un serait-il comment faire svp?

merci de vos réponse :)
A voir également:

6 réponses

Yuh12 Messages postés 184 Date d'inscription mercredi 7 mai 2014 Statut Membre Dernière intervention 28 septembre 2017 24
19 juin 2017 à 10:58
Bonjour,

Pour 10 lignes de SQL, il vaut mieux ne pas s'embêter et boucler sur la requête pour faire 10 INSERT INTO grâce à un foreach.
Mais pour 5000 lignes par exemple, le fait de faire un seul INSERT INTO avec 5000 VALUES au lieu de 5000 INSERT INTO, est un vrai gain de performance.

Le principe va être d'écrire la requête en PHP, en concaténant les valeurs de la requête SQL.

// On "déclare" le Insert Into sans préciser ses VALUES
$sql_insert = "INSERT INTO `matable` (`id_table`,`col1`, `col2`) VALUES ";
// Pour vérifier si on est sur le dernier élément du tableau
$lastKey = array_pop(array_keys($a_elements)); 	

// On boucle sur le tableau PHP qui renvoit les valeurs
foreach($a_elements as $key=>$elements)
{
	$sql_insert.="("; // Ajout de la parenthèse de debut
	foreach($elements as $key2=>$line)
	{
		if($key2===0){
			$sql_insert.="NULL"; // ID en auto-increment déclaré à NULL pour prendre une valeur automatique
		}
		$sql_insert.=",'".$line."'"; // on remplit toutes les valeurs
	}

	$sql_insert.=")"; // Ajout de la parenthèse de fin
     // On ajoute une virgule si ce n'est pas le dernier element
	if ($key !== $lastKey) {
	    $sql_insert.=",";
	}
}


Et ainsi on obtient un
$sql_insert = "INSERT INTO `matable` (`id_table`,`col1`, `col2`) VALUES ('0','ligne1_col1','ligne1_col2'),
('1','ligne2_col1','ligne2_col2')";


Voici ma méthode, mais je ne suis pas contre un peu de simplification si quelqu'un à une idée :).
0