JeuWeb - Crée ton jeu par navigateur

Version complète : Génération d'une requête SQL
Vous consultez actuellement la version basse qualité d’un document. Voir la version complète avec le bon formatage.
en reparcourant une partie de mon code qui marchait (oui c'est rare ^^) je me suis aperçu que je faisais une boucle sur une requête du genre

Code PHP :
<?php 
for ($i =0; $i<10; $i++)
{
$Req = 'select toto from table where tutu = '.$i;
$bdd->Lancer ($Req);
....
}

du coup 10 requête pour le prix d'une. Je cherche donc à construire la requête
Code PHP :
<?php 
$Req
= 'select toto from table where tutu in (0,1,2,3,4,5,6,7,8,9)';

Je voulais savoir si ma méthode était pertinente, ou si vous aviez un "truc" plus intéressant (évidemment faut pas voir $i dans le in mais un truc un peu plus poussé)

Code PHP :
<?php 
$listeLoca
= '';
$virgule ='';
for (
$i=1; $i<=$nb; $i++)
{
$liste .= $virgule.$i;

$virgule =',';
}

$Req ='select toto from table where tutu in ('.$liste.')';

sachant que ça marche, la question y a t il un truc un peu plus sexy/optimisé/avec panache ?
J'pense que ta méthode est la bonne. Je doute qu'il y ai plus sexy (sauf en mettant des espaces autour des = et <= Big Grin), même si je peux me tromper. Smile


Sephi-Chan
en supposant que tutu est un int(ou dérivée) unsigned:
'select toto from table where tutu<10'

C'est toute de même plus beau, et je pense même que c'est plus rapide car la comparaison inférieur est plus rapide que l'égalité (or en plus avec in il y a une égalité + des inégalités)
Zamentur a écrit :en supposant que tutu est un int(ou dérivée) unsigned:
'select toto from table where tutu<10'

C'est toute de même plus beau, et je pense même que c'est plus rapide car la comparaison inférieur est plus rapide que l'égalité (or en plus avec in il y a une égalité + des inégalités)

yep mais d'où ma remarque
Citation :(évidemment faut pas voir $i dans le in mais un truc un peu plus poussé)

imagine qu'au lieu d'avoir
tutu = '.$i tu as tutu = "'.$chaine[$i].'"

je le fais en général, effectivement si c'était l ensemble des chiffres < 10 et > 0 je ne ferais pas un in Smile
Salut,

Si ta requête recouvre un champ de nombre il est fortement préférable d'utilser BETWEEN x AND y.

Si par contre c'est une liste d'id (par exemple) et que ceux-ci peuvent varier, une syntaxe comme celle-ci sera plus adaptée:
$array = array(...); // Tableau qui contient les num id
$query = '... WHERE id IN('.implode(', ', $array).')';
ah effectivement c'est plus joli que mes 15 lignes ^^

en performance, c'est raisonnable ?
JeromeJ, je trouve que ta solution est très belle ! Elle nécessite moins de mémoire et les fonctions internes étant souvent les plus performante que des boucles For ...
Si j'avais du temps, je remanierais quelques une de mes fonctions ... par contre, je garde ton code sous le coude pour mes prochains développements.

Kéké
Citation :imagine qu'au lieu d'avoir
tutu = '.$i tu as tutu = "'.$chaine[$i].'"
Si il s'agit de chaine de caractere unique, il peut etre envisagé d'utilisert un type SET ou ENUM, et de faire la même chose avec un BETWEEN.

Dans l'absolue IN n'est utile si et seulement si il y a (ou aura) potentielement des trous dans la liste de ligne demandé