Select From where

Signaler
Messages postés
38
Date d'inscription
jeudi 21 mars 2002
Statut
Membre
Dernière intervention
10 juillet 2011
-
Messages postés
38
Date d'inscription
jeudi 21 mars 2002
Statut
Membre
Dernière intervention
10 juillet 2011
-
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

Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
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, ....
Messages postés
2083
Date d'inscription
jeudi 16 septembre 2004
Statut
Membre
Dernière intervention
15 octobre 2020
1
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
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
Le problème de ça est que tu fais trois requêtes, c'est pas optimisé ;)
Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
3
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
Messages postés
38
Date d'inscription
jeudi 21 mars 2002
Statut
Membre
Dernière intervention
10 juillet 2011

Merci a vous pour ces reponses, je les essayes et je vous tiens au courranr, encore merci

Du bout des doigts, née VB
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
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
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
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
Messages postés
38
Date d'inscription
jeudi 21 mars 2002
Statut
Membre
Dernière intervention
10 juillet 2011

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
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
ç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 ;)
Messages postés
38
Date d'inscription
jeudi 21 mars 2002
Statut
Membre
Dernière intervention
10 juillet 2011

re

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

Du bout des doigts, née VB
Messages postés
38
Date d'inscription
jeudi 21 mars 2002
Statut
Membre
Dernière intervention
10 juillet 2011

je viens de verifier la version de MYSQL c'est la version 5.0.32

Du bout des doigts, née VB
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
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 :(
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
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
Messages postés
38
Date d'inscription
jeudi 21 mars 2002
Statut
Membre
Dernière intervention
10 juillet 2011

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
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
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.
Messages postés
38
Date d'inscription
jeudi 21 mars 2002
Statut
Membre
Dernière intervention
10 juillet 2011

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
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
J'ai mis deux fois joueur1 dans deux requêtes, regarde si je dois pas mettre joueur3 ou autre chose ;)
Messages postés
38
Date d'inscription
jeudi 21 mars 2002
Statut
Membre
Dernière intervention
10 juillet 2011

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
Messages postés
38
Date d'inscription
jeudi 21 mars 2002
Statut
Membre
Dernière intervention
10 juillet 2011

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