Chercher dans plusieurs champs

Eléphant du PHP | 160 Messages

24 sept. 2007, 00:46

Bonjour,

Je voulais chercher dans plusieurs champs avec cette requête :
		case 'Rechercher News':
$query = "SELECT * FROM news WHERE marque+titre+resume+description LIKE '".$recherche."%' AND genre='1' ORDER BY id ASC";
		$result = mysql_query($query);
	break;
Mais cela ne doit pas être la bonne syntaxe. Est-ce seulement possible ?

Merci,

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

24 sept. 2007, 03:23

Modération :
Afin d'obtenir plus de réponses, le sujet est déplacé dans le forum "SQL & Bases de données".


Même si tu es en présence de code PHP le problème reste du SQL.

Plusieurs sujet parlent de moterus de recherche utilisant les "OR/AND LIKE"
La bonne syntaxe serait donc :

Code : Tout sélectionner

WHERE champ1 LIKE'' OR/AND champ2 LIKE '' ...
Regarde aussi du coté de la recherche "full text".

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 160 Messages

24 sept. 2007, 10:45

Merci d'avoir déplacé le sujet,
Je viens d'essayer :
		case 'Rechercher News':
$query = "SELECT * FROM opticien_news WHERE marque LIKE '%".$recherche."%' OR titre LIKE '%".$recherche."%' OR resume LIKE '%".$recherche."%' OR description LIKE '%".$recherche."%' AND genre='1' ORDER BY id ASC";
		$result = mysql_query($query);
	break;
Alors ça marche bien pour ce qui est de la recherche, sauf qu'il m'affiche aussi dans les résultats les enregistrement ayant pour valeur genre='2' et genre='1' alors que j'ai bien noté AND genre='1'

Quelqu'un peut-il m'expliquer cela ?

Merci,

Eléphanteau du PHP | 36 Messages

27 sept. 2007, 19:47

Bonsoir, essaye avec des parentheses
case 'Rechercher News': 
$query = "SELECT * FROM opticien_news WHERE (marque LIKE '%".$recherche."%' OR titre LIKE '%".$recherche."%' OR resume LIKE '%".$recherche."%' OR description LIKE '%".$recherche."%') AND genre='1' ORDER BY id ASC"; 
        $result = mysql_query($query); 
    break;