JeuWeb - Crée ton jeu par navigateur
[Réglé] requete mysql avec nombre de critere de selection indefinit - 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 : [Réglé] requete mysql avec nombre de critere de selection indefinit (/showthread.php?tid=1691)



[Réglé] requete mysql avec nombre de critere de selection indefinit - jo_link_noir - 02-09-2007

bonjour,

j'ai un petit problème pour faire une requête mysql...
j'ai un tableau qui à des nom de joueur, il se présente comme ça :
0=>membre1, 1=>membre2, etc

et j'ai une requête qui doit sélection les champ avec comme pseudo ceux dans l'array...
un truc comme ça :
mysql_query("SELECT point FROM membre
WHERE membre='membre1' OR membre='membre2' ") or die (mysql_error());

j'ai cherchais mais pas de resultat valable, que des erreurs Big Grin

le seul truc que j'ai trouvais c'est ça... requêtes dans une boucle :
Code PHP :
<?php 
$i
=0;
while (list(
$clef, $valeur) = each($membre))
{
$info_membre[$i] = mysql_query("SELECT point FROM membre
WHERE pseudo='"
.$valeur."' ") or die (mysql_error());
$info_joueur[] = mysql_fetch_array($info_membre[$i]);
}
ce qui n'est pas terrible

merci de me venir en aide ^^


RE: requete mysql avec nombre de critere de selection indefinit - transgohan - 02-09-2007

Code PHP :
<?php 
$sql
= mysql_query("SELECT les_champs_à_sélectionner FROM membre ORDER BY (id? pseudo ?) ASC") or die(mysql_error());
while(
$r = @mysql_fetch_array($sql))
{
$info_joueur[$r['pseudo']] = $r;
}

Cela t'aiderait-il ?


RE: requete mysql avec nombre de critere de selection indefinit - Byleth - 02-09-2007

J'ai beaucoup de mal à comprendre : tu souhaites récupèrer une info sur certains joueurs, ces joueurs n'ayant pas forcément de points communs (en tout cas pas par rapport à ta table?) et tu voudrais faire ça en une seule requête?

Je te dirais bien de faire ta boucle avant : tu as un tableau avec tous les pseudos et tu fais une boucle pour que tu ais un

Code PHP :
<?php 
//$tableau_pseudos le tableau avec les pseudos, tu dois en avoir au moins un dedans

$requete='SELECT point FROM membre WHERE pseudo='.$tableau_pseudos[0];

$max=count($tableau_pseudo)

for (
$i=1;$i<$max;$i++){
$requete=$requete.' OR pseudo='.$tableau_pseudos[$i]';
}

Normalement, ça devrait te faire ce que tu veux (enfin si c'est bien ça que tu veux ^^). Si tu veux afficher le tout après, récupères aussi le pseudo dans la requête et rentre le tout dans un tableau...[/php]


RE: requete mysql avec nombre de critere de selection indefinit - Sephi-Chan - 02-09-2007

Mieux vaut utiliser la clause de séléction IN, qui s'utilise de cette manière :
Code :
SELECT point FROM membre
WHERE membre IN('membre1', 'membre2');
C'est toujours bien plus rapide que OR, et c'est surtout fait pour ça.

Ta problématique est donc simplement de construire ta chaîne.


Sephi-Chan


RE: requete mysql avec nombre de critere de selection indefinit - Byleth - 02-09-2007

Je ne connaissais pas IN, c'est très intéressant.

Tu n'as plus qu'à adapter ce que je te propose avec le IN, ça ne devrait pas être trop dur Smile


RE: requete mysql avec nombre de critere de selection indefinit - Sephi-Chan - 02-09-2007

Oui, la construction de la chaîne à placer dans le IN se fait indépendamment de la requête, tu auras par exemple :
Code PHP :
<?php 
$str
= '';
/*
Création de la chaîne par ajouts (grâce à $str .= "blablabla").
Le but est de former une chaîne de la forme :
'membre1', 'membre2', 'membre8'
*/

$qry = sprintf("SELECT point FROM membre WHERE membre IN('%s');", $str);
$sql = mysql_query($qry) or exit();
Il serait donc bon de montrer un peu la tronche de l'array qui contient les données, qu'on puisse t'aider à créer cette chaîne.


Sephi-Chan


RE: requete mysql avec nombre de critere de selection indefinit - jo_link_noir - 02-09-2007

moi non plus je ne connaissais pas le IN,
en tout cas merci sephi, ça marche :respect:
Code PHP :
<?php 
$qry
= sprintf("SELECT point FROM membre WHERE pseudo IN(%s) ", implode(",",$membre));
$sql = mysql_query($qry) or exit();