Requetes avancées sql

Résolu/Fermé
Fetide68 Messages postés 737 Date d'inscription dimanche 4 janvier 2009 Statut Membre Dernière intervention 14 avril 2023 - 21 sept. 2009 à 16:24
 internaute - 19 mai 2011 à 10:34
Bonjour,

Je fais de petits exercices d'entraînement php/MySql. Actuellement je m'entraîne sur une base de films sur laquelle je cherche à faire une recherche avancée.

Je peut faire une recherche sur le titre, le genre (comédie, action,...) et la nationalité. Seulement je ne sais pas comment faire ma requête si par exemple seuls deux champs sont renseignés... ?

Je teste si le formulaire est rempli sur le bouton validé :
<input name="valider" value="Go"" />

if ($_POST['valider'] == "Go")...


Et je fais ma requête... :

mysql_query ("SELECT * FROM films WHERE titre LIKE '%$titre%' AND genre = '$genre' AND nationalite = '$nationalite'");


Genre et nationalité sont gérées à partir de listes de choix. Mais la requête ne fonctionne que sur 1 champ !

7 réponses

Darkito Messages postés 1191 Date d'inscription vendredi 7 décembre 2007 Statut Membre Dernière intervention 26 mai 2010 545
21 sept. 2009 à 16:32
Bonjour,

Tu peux scindé ta requête sql et y ajouter les conditions en fonction des valeurs du formulaire.

$query = "SELECT * FROM films";

if ($titre != '') { $query += "WHERE titre LIKE '%$titre%'"; }

if ($genre != '') {
    if ($titre != '') { $query += "AND genre = '$genre'"; }
    else { $query += "WHERE genre = '$genre'";
}

etc...

mysql_query($query);


0
Fetide68 Messages postés 737 Date d'inscription dimanche 4 janvier 2009 Statut Membre Dernière intervention 14 avril 2023 32
21 sept. 2009 à 16:55
Le truc c'est que là, j'ai simplifié la table. Elle a quelques champs en plus. En plus, c'est un exercice... j'aimerais trouver la solution.

S'il faut faire des recherche comme ça, j'ai pas fini... Mais merci quand même...
0
Fetide68 Messages postés 737 Date d'inscription dimanche 4 janvier 2009 Statut Membre Dernière intervention 14 avril 2023 32
21 sept. 2009 à 17:28
En fait, c''était juste un problème d'encodage de caractère dans le champs...
0
Fetide68 Messages postés 737 Date d'inscription dimanche 4 janvier 2009 Statut Membre Dernière intervention 14 avril 2023 32
22 sept. 2009 à 16:57
	$recherche = mysql_query ("SELECT * FROM films 
		WHERE 
			type LIKE '%$type%' 
			AND genre LIKE '%$genre%' 
			AND nationalite LIKE '%$nationalite%' 
			AND duree BETWEEN '$min' AND '$max'
			AND titre LIKE '%$recherche%' OR realisateur LIKE '%$recherche%' OR acteurs LIKE '%$recherche%' 
			");


La variable récupère le champs 'recherche' et permet comme vous pouvez le voir, de chercher le titre du film ou le nom ou prénom d'un acteur ou d'un realisateur. La dernière ligne de la requête semble problématique.

Si je mets des AND à la place des OD ou des OR à la place des AND, ça marche plus. OR ca ne m'arrange pas haha... Merci !
0
Darkito Messages postés 1191 Date d'inscription vendredi 7 décembre 2007 Statut Membre Dernière intervention 26 mai 2010 545
22 sept. 2009 à 17:18
Il suffit de mettre le triplet de OR entre parenthèses.
AND (  titre LIKE '%$recherche%' OR realisateur LIKE '%$recherche%' OR acteurs LIKE '%$recherche%' )
0
Il faut respecter la priorité des opérateurs
0

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

Posez votre question
Fetide68 Messages postés 737 Date d'inscription dimanche 4 janvier 2009 Statut Membre Dernière intervention 14 avril 2023 32
22 sept. 2009 à 17:20
Oh, c'est magique... Merci !
0
Darkito Messages postés 1191 Date d'inscription vendredi 7 décembre 2007 Statut Membre Dernière intervention 26 mai 2010 545
22 sept. 2009 à 17:23
C'est purement de la logique, rien de magique :p
0
Fetide68 Messages postés 737 Date d'inscription dimanche 4 janvier 2009 Statut Membre Dernière intervention 14 avril 2023 32
22 sept. 2009 à 17:28
Mais je savais pas qu'on pouvait faire ça...

Moi j'essayais de trouver le moyen de faire une autre requete... where titre IN (...

J'ai même pas pensé que SQL permettait ce genre de choses... et je savais pas... Merci
0