Select From where

DVTAZ Messages postés 38 Date d'inscription jeudi 21 mars 2002 Statut Membre Dernière intervention 10 juillet 2011 - 2 janv. 2007 à 20:50
DVTAZ Messages postés 38 Date d'inscription jeudi 21 mars 2002 Statut Membre Dernière intervention 10 juillet 2011 - 3 janv. 2007 à 21:37
Bonjour à toutes et à tous

Voila, ne serait il pas possible de simplifier ce genre de code,(voir ci-dessous)
je fait une requete avec un critere identique mais sur des champs différents, et je passe par une case Texte!

merci d'avance pour vorte aide
<hr />
<!---- ======================================-->
  $query = "SELECT * FROM equipe WHERE joueur1 like '%".$searchterm."%'";
   $result = mysql_query($query);
   $num_results = mysql_num_rows($result);
   
   echo "  ".$num_results."&nbsp;&nbsp; Match trouvé pour &nbsp; ".$searchterm." ";
    for ($i=0; $i <$num_results; $i++)
    {
     $row = mysql_fetch_array($result);

affichage des données 1

<!---- ======================================-->
  $query = "SELECT * FROM equipe WHERE joueur2 like '%".$searchterm."%'";
   $result = mysql_query($query);
   $num_results = mysql_num_rows($result);
   
   echo "  ".$num_results."&nbsp;&nbsp; Match trouvé pour &nbsp; ".$searchterm." ";
    for ($i=0; $i <$num_results; $i++)
    {
     $row = mysql_fetch_array($result);

affichage des données 2
<!---- ======================================-->
  $query = "SELECT * FROM equipe WHERE joueur2 like '%".$searchterm."%'";
   $result = mysql_query($query);
   $num_results = mysql_num_rows($result);
   
   echo "  ".$num_results."&nbsp;&nbsp; Match trouvé pour &nbsp; ".$searchterm." ";
    for ($i=0; $i <$num_results; $i++)
    {
     $row = mysql_fetch_array($result);

affichage des données 3

il doit y avoir une autre facon de faire !!!

Du bout des doigts, née VB

19 réponses

cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
3 janv. 2007 à 00:03
Salut,

tout dépend quelle est ta version de MySQL. Essaie ça :

$query = '(SELECT * FROM equipe WHERE joueur1 like "%'.$searchterm.'%") UNION (SELECT * FROM equipe WHERE joueur2 like "%'.$searchterm.'%") UNION (SELECT * FROM equipe WHERE joueur1 like "%'.$searchterm.'%"')';

Et par contre évite les SELECT *, mets des SELECT champ1, champ2, ....
0
Flachy Joe Messages postés 2103 Date d'inscription jeudi 16 septembre 2004 Statut Membre Dernière intervention 21 novembre 2023 1
3 janv. 2007 à 10:41
Ou simplement une fonction :
function select_joueur($champ){
  $query = "SELECT * FROM equipe WHERE".$joueur." like '%".$searchterm."%'";
   $result = mysql_query($query);
   $num_results = mysql_num_rows($result);
   
   echo "  ".$num_results."&nbsp;&nbsp; Match trouvé pour &nbsp; ".$searchterm." ";
    for ($i=0; $i <$num_results; $i++)
    {
     $row = mysql_fetch_array($result);
}

select_joueur('joueur1');
select_joueur(''joueur2'');

Flachy Joe
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
3 janv. 2007 à 13:34
Le problème de ça est que tu fais trois requêtes, c'est pas optimisé ;)
0
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
3 janv. 2007 à 15:08
L'Union aussi fait 3 requètes Antho :)

J'aurais fais ca moi :

public function Select($player) {
 $db->query(' SELECT xx,yy,zz FROM equipe WHERE joueur LIKE "%'.$player.'%" ');
  if ( $db->num_rows() === 0 )
       throw new Exception('Aucun match trouvé pour ce joueur.');
  else        while ( $data $db->fetch_object() ) $array[] $data;

return $array;

}

$match = new match(); // Nom de la classe... jla nomme comme ca arbitrairement hein ^^

try {
  $tabmatch = $match->Select('nomdujoueur');
   if ( count($tabmatch) === 1 ) {
        echo '1 match a été trouvé !

';
        echo ''.$tabmatch[0]->xx.'';
        echo ''.$tabmatch[0]->yy.'';
        //etc...
   } else {
        for ($i=0, $c=count($tabmatch); $i<$c; $i++) {
        echo ''.$c.' matchs trouvés : '

';
        echo ''.$tabmatch[$i]->xx.'';
        echo ''.$tabmatch[$i]->yy.'';
        //etc...
   }

} catch ( Exception $e ) {
  echo $e->getMessage();
}

Bah, c'est de l'orienté objet aussi... Ca restera toujours un peu plus lourd. Mais au moins c'est lisible :s
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
DVTAZ Messages postés 38 Date d'inscription jeudi 21 mars 2002 Statut Membre Dernière intervention 10 juillet 2011
3 janv. 2007 à 17:20
Merci a vous pour ces reponses, je les essayes et je vous tiens au courranr, encore merci

Du bout des doigts, née VB
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
3 janv. 2007 à 19:06
FHx > Tu fais une seule requête, qui elle-même en fait trois en interne, mais ça reste une seule requête vue de l'extérieur, c'est donc plus optimisé. Sinon idem, une fonction, tu l'appelles trois fois ... bof bof quoi.

Enfin bon chacun sa méthode, moi je propose une solution, libre à DVTAZ de l'accepter ou d'en choisir une autre ;)

a +

Antho
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
3 janv. 2007 à 19:07
FHx > Tu fais une seule requête, qui elle-même en fait trois en interne, mais ça reste une seule requête vue de l'extérieur, c'est donc plus optimisé. Sinon idem, une fonction, tu l'appelles trois fois ... bof bof quoi.

Enfin bon chacun sa méthode, moi je propose une solution, libre à DVTAZ de l'accepter ou d'en choisir une autre ;)

a +

Antho
0
DVTAZ Messages postés 38 Date d'inscription jeudi 21 mars 2002 Statut Membre Dernière intervention 10 juillet 2011
3 janv. 2007 à 19:19
Pour Anthomicro:
Je viens d'esayer ta proposition mais j'obtiens un message d'erreur du genre:
"Warning: mysql_num_rows(): supplied argument is not a valid Mysql result resource in/mnt/139/sdc/2/0/nom du site/repertoire/page.php on line 37 "

en ligne 36 et 37 j'ai le code suivant :
   $result  =  mysql_query($squery);
   $num_results  =  mysql_num_rows(result);

auparavent j'ai modifié ma requete comme ci-dessous:

$query = "(SELECT joueur1 FROM equipe WHERE joueur1 like '%".$searchterm."%') UNION (SELECT joueur2 FROM equipe WHERE joueur2 like '%".$searchterm."%') UNION (SELECT joueur3 FROM equipe WHERE joueur3 like '%".$searchterm."%'')";

Du bout des doigts, née VB
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
3 janv. 2007 à 19:21
ça dépend de la version de MySQL que tu as, il faut une version supérieure ou égale à la 4.1 il me semble ;)
0
DVTAZ Messages postés 38 Date d'inscription jeudi 21 mars 2002 Statut Membre Dernière intervention 10 juillet 2011
3 janv. 2007 à 19:24
re

comment voir la version de Mysql?
je suis sur Free ?

Du bout des doigts, née VB
0
DVTAZ Messages postés 38 Date d'inscription jeudi 21 mars 2002 Statut Membre Dernière intervention 10 juillet 2011
3 janv. 2007 à 19:27
je viens de verifier la version de MYSQL c'est la version 5.0.32

Du bout des doigts, née VB
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
3 janv. 2007 à 19:28
Je n'arrive pas à accéder à mon compte free donc je peux pas te dire, mais je ne suis pas sûr que ça passe :(
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
3 janv. 2007 à 19:28
ah ok bon bah ça vient de la requête, je vois pas d'erreur, en même temps vu l'heure ... faudrait voir ce que renvoie phpmyadmin comme erreur
0
DVTAZ Messages postés 38 Date d'inscription jeudi 21 mars 2002 Statut Membre Dernière intervention 10 juillet 2011
3 janv. 2007 à 19:32
ce que renvoie phpmyadmin ?? comprend pas

par contre, a premiere vue il n'accepte pas  ; mysql_num_rows($result);
le probleme vient de là?

PS: je vais essayer la requete directement dans la base sur free, je verrais bien ca reaction, (enfin peut etre ^ ^ )

Du bout des doigts, née VB
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
3 janv. 2007 à 19:36
Non le problème vient de la requête. Tape la requête telle qu'elle doit apparaître dans Phpmyadmin (onglet sql) et dis-nous ce que ça fait.
0
DVTAZ Messages postés 38 Date d'inscription jeudi 21 mars 2002 Statut Membre Dernière intervention 10 juillet 2011
3 janv. 2007 à 19:41
voilà c'est fait, alors :
la requete fonctionne sans erreur mais n'affiche le resultat que sur le 1er champs, c est a dire "joueur1" et ne donne aucun résultat sur les autres requetes, et j'ai verifié dans les autres champs de la base, j'ai bien un résultat à afficher ??

Du bout des doigts, née VB
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
3 janv. 2007 à 20:36
J'ai mis deux fois joueur1 dans deux requêtes, regarde si je dois pas mettre joueur3 ou autre chose ;)
0
DVTAZ Messages postés 38 Date d'inscription jeudi 21 mars 2002 Statut Membre Dernière intervention 10 juillet 2011
3 janv. 2007 à 20:45
oui oui ca j avais vue et rectifié, voir la requete 6 message aus dessus lol

par contre j' ai essayé avec la methode " OR", j'obtiens une réponse mais l'affichage ne convient pas, du fait que je dois afficher tout les champs suceptibles de contenir ma requete, ?? dileme

Du bout des doigts, née VB
0
DVTAZ Messages postés 38 Date d'inscription jeudi 21 mars 2002 Statut Membre Dernière intervention 10 juillet 2011
3 janv. 2007 à 21:37
voila j ai rectifié la requete fallait enlever les () , mais ca ne donne pas ce que ca devrait, un seul enregistrement apparait.
voila la requete modifié :
$query = "SELECT joueur1 FROM equipe WHERE joueur1 like '%".$searchterm."%' UNION SELECT joueur2 FROM equipe WHERE joueur2 like '%".$searchterm."%' UNION SELECT joueur3 FROM equipe WHERE joueur3 like '%".$searchterm."%'";
merci pour l'aide apporté !!

Du bout des doigts, née VB
0
Rejoignez-nous