JeuWeb - Crée ton jeu par navigateur
2 requêtes mySQL ou 1 boucle PHP - 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 : 2 requêtes mySQL ou 1 boucle PHP (/showthread.php?tid=2416)

Pages : 1 2


2 requêtes mySQL ou 1 boucle PHP - comg - 14-02-2008

Salut à tous,

Je me posais une question (qui risque de mettre utile en developpement)
Mise en situation :

J'ai une table joueurs avec un champs sexe (fille / garcon)
Je veux classer les joueurs dans 2 div differents :

Solution 1 :
Je fais une requete mysql pour les filles (WHERE sex='fille') et j'affiche
puis une requete pour les garcons (WHERE sex='garcon') et jaffiche

Solution 2 :
Je fais une requete general (SELECT * FROM joueurs)
Et je trie 2 fois :
while($joueur = mysql_fetch_array($req_joueur))
{
if($joueur['sex'] == 'fille')
{ echo $joueur['nom']; }
}
Puis :
while($joueur = mysql_fetch_array($req_joueur))
{
if($joueur['sex'] == 'garcon')
{ echo $joueur['nom']; }
}

Instinctivement je pense que la deuxieme solution est meilleure, mais je ne me rend pas compte...
Merci de me donner votre avis.

Bye

ComG


RE: 2 requêtes mySQL ou 1 boucle PHP - SorenS - 14-02-2008

A chaud comme ça je dirais que la solution 2 est la meilleure aussi :
Solution 1 : 2 requêtes
Solution 2 : 1 requête

Après il faut voir ce que mysql_fetch_array() utilise comme ressource...


RE: 2 requêtes mySQL ou 1 boucle PHP - pascal - 14-02-2008

oubien une seule requête, avec un ORDER BY sex à la fin.

A+

Pascal


RE: 2 requêtes mySQL ou 1 boucle PHP - X-ZoD - 14-02-2008

+1 pascal mdr !


RE: 2 requêtes mySQL ou 1 boucle PHP - comg - 14-02-2008

Ouai mais le truc c'est que je veux les mettres dans 2 div differents. A deux endroit different dans la page (en réalité c'est pas pour une histoire de sexe :p c'est pour classer tes amis, tes connaissances, tes amours et les autres joueurs dans des cadres séparés)

Merci bien tout de même.


RE: 2 requêtes mySQL ou 1 boucle PHP - pascal - 14-02-2008

he ben ?

une seule requête, avec les tris qui vont bien; ensuite dans le parcours des résultats, lorsque le critère change, on change le div de destination.

A+

Pascal


RE: 2 requêtes mySQL ou 1 boucle PHP - nemesis_elite - 14-02-2008

Comme l'a dit Pascaltje.

Code PHP :
<?php
$sDivGarçon
= '<div id="garçon">';
$sDivFille = '<div id="fille">';

$req = mysql_query('SELECT * FROM joueurs ORDER BY sex');
while(
$joueur = mysql_fetch_assoc($req)){
if(
$joueur['sex'] == 'garçon'){
$sDivGarçon.= $joueur['nom'].'<br />';
}elseif(
$joueur['sex' == 'fille']){
$sDivFille.= $joueur['nom'].'<br />';
}
}
$sDivGarçon.= '</div>';
$sDivFille.= '</div>';

echo
$sDivGarçon.'<br />';
echo
$sDivFille;
?>

NemeSiS_eliTe


RE: 2 requêtes mySQL ou 1 boucle PHP - comg - 14-02-2008

Malin, je pense jamais a passé dans des variables !!!
N'empeche que le tri sert quedalle vu qu'on fait les test :p

Merci beaucoup en tout cas !

Tiens ça me fait penser : a chaque fois que je rajoute un nom, ensuite je rajoute ", " apres, comment faire pour que ça ne soit pas le cas pour le dernier ? sizeof(mysql_fetch_array($req_joueurs)) et j'affiche avec une boucle pour que lorsqu'on atteind la derniere on mette pas la virgule ?

Bonne soirée


RE: 2 requêtes mySQL ou 1 boucle PHP - pascal - 14-02-2008

il existe une fonction pour ça :
http://fr.php.net/manual/fr/function.implode.php

si tu fais le tri, tu devras faire moins de tests.

A+

Pascal


RE: 2 requêtes mySQL ou 1 boucle PHP - Ziliev - 15-02-2008

J'plussois le script à nemesis ('fin l'idée essentiellement hein, il semble y avoir quelques fautes de syntaxe) avec juste une remarque: le ORDER By il te sert à quoi ? De toute facon il trie chaque entrée, alors pourquoi rajouter cet ORDER BY qui doit te faire perdre facilement 1 millième de seconde pour ta requête Tongue Sans compter qu'en les orderant par nom plutot que par sexe t'aurais un affichage un peu plus agréable ... Faire un ORDER BY et détecter la transition pour t'épargner de conditionner à chaque entrée d'accord ('fin bon, pour gagner encore une poignée de nanosecondes quoi, à moins que tu n'affiches le bottin ou que ton serveur soit une calculatrice), mais là ...

Pour les virgules effectivement t'as la possibilité de mettre ton résultat dans un array et de l'imploder. Personellement je remplis toujours une grosse variable avec le contenu de la page pour l'echo en fin de script (ca a ses avantages), donc bétement j'ajoute ", " après chaque nom dans le while, et une fois le while fini je fais un substring de la variable echo en retirant les 2 derniers caractères. Ce que tu peux faire ici puisque les listes sont des variables.