JeuWeb - Crée ton jeu par navigateur
Génération d'une requête SQL - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Génération d'une requête SQL (/showthread.php?tid=3065)



Génération d'une requête SQL - Ter Rowan - 19-09-2008

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 ?


RE: [PHP] petite question certainement un peu bête - Sephi-Chan - 19-09-2008

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


RE: [PHP] petite question certainement un peu bête - Zamentur - 19-09-2008

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)


RE: [PHP] petite question certainement un peu bête - Ter Rowan - 20-09-2008

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


RE: [PHP] petite question certainement un peu bête - JeromeJ - 24-09-2008

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).')';


RE: [PHP] petite question certainement un peu bête - Ter Rowan - 24-09-2008

ah effectivement c'est plus joli que mes 15 lignes ^^

en performance, c'est raisonnable ?


RE: [PHP] petite question certainement un peu bête - keke - 24-09-2008

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é


RE: [PHP] petite question certainement un peu bête - Zamentur - 24-09-2008

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é