Problème Résultat requete mysql
Fermé
AAAid
-
Modifié par jordane45 le 21/04/2015 à 19:17
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 - 22 avril 2015 à 01:08
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 - 22 avril 2015 à 01:08
A voir également:
- Problème Résultat requete mysql
- Mysql download - Télécharger - Bases de données
- Lexer resultat - Télécharger - Sport
- Resultat loto d'aujourd'hui ✓ - Forum Excel
- Resultat loto d'aujourd'hui rdc ✓ - Forum Excel
- Évariste souhaite télécharger le logiciel libreoffice depuis le site de son éditeur. sélectionnez le résultat de recherche sur lequel il doit cliquer. ✓ - Forum Windows Vista
5 réponses
jee pee
Messages postés
39649
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
26 avril 2024
9 238
21 avril 2015 à 18:57
21 avril 2015 à 18:57
Salut,
Déjà ta condition sur titre nom prénom, il faudrait la mettre avec des parenthèses:
AND ( titre ...OR nom ... OR prenom ....)
Ensuite il se pose un problème si l'un des 3 n'est pas renseigné. Le like se fait donc avec like '%%', c'est à dire toutes les lignes.
Tu pourrais essayer de remplacer NULL par une valeur qui n'arrive pas (exemple AAAZZZZEEE333) quand tu affectes les variables en php
cdlt
Déjà ta condition sur titre nom prénom, il faudrait la mettre avec des parenthèses:
AND ( titre ...OR nom ... OR prenom ....)
Ensuite il se pose un problème si l'un des 3 n'est pas renseigné. Le like se fait donc avec like '%%', c'est à dire toutes les lignes.
Tu pourrais essayer de remplacer NULL par une valeur qui n'arrive pas (exemple AAAZZZZEEE333) quand tu affectes les variables en php
cdlt
jordane45
Messages postés
38145
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 avril 2024
4 650
Modifié par jordane45 le 21/04/2015 à 19:23
Modifié par jordane45 le 21/04/2015 à 19:23
Bonjour,
Peux tu tester avec cette requête :
NB : Es-tu sûr que ta variable c'est bien $auteut ? et pas $auteur ...(j'ai corrigé dans ma requête ci-dessus ! )
Cordialement,
Jordane
Peux tu tester avec cette requête :
SELECT L.Titre ,L.ISBN ,A.Nom ,A.prenom ,T.nom FROM livre L LEFT JOIN auteur A ON A.id_auteur = L.id_auteur LEFT JOIN theme T ON T.id_theme = L.id_theme WHERE A.Nom LIKE '%$auteur%' OR A.prenom LIKE '%$auteur%' OR L.Titre LIKE '%$titre%'
NB : Es-tu sûr que ta variable c'est bien $auteut ? et pas $auteur ...(j'ai corrigé dans ma requête ci-dessus ! )
Cordialement,
Jordane
jee pee
Messages postés
39649
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
26 avril 2024
9 238
Modifié par jee pee le 21/04/2015 à 19:49
Modifié par jee pee le 21/04/2015 à 19:49
Salut,
Je suis un vieil utilisateur d'Oracle, et cette syntaxe nativement n'existait pas. Elle a été introduite après pour être sql ansi, mais les anciens n'ont jamais accroché ;-) Pourtant, et c'est clair dans cet exemple, cela permet de bien dissocier jointure et critères de sélection.
En php (je ne pratique pas) '%$auteur%' va bien détecter la variable $auteur pas $auteur% ? il n'y a pas des délimiteurs type '%"$auteur"%' ou '%{$auteur}%'
Et comme je l'écrivais, si l'un des 2 criteres est vide, on ramène toutes les lignes.
Et surtout le choix de départ est mauvais. Si dans le formulaire le champ "Nom prénom" contient 'Victor Hugo', jamais on ne peut trouver l'auteur avec A.Nom LIKE '%$auteur%' OR A.prenom LIKE '%$auteur%'.
Je suis un vieil utilisateur d'Oracle, et cette syntaxe nativement n'existait pas. Elle a été introduite après pour être sql ansi, mais les anciens n'ont jamais accroché ;-) Pourtant, et c'est clair dans cet exemple, cela permet de bien dissocier jointure et critères de sélection.
En php (je ne pratique pas) '%$auteur%' va bien détecter la variable $auteur pas $auteur% ? il n'y a pas des délimiteurs type '%"$auteur"%' ou '%{$auteur}%'
Et comme je l'écrivais, si l'un des 2 criteres est vide, on ramène toutes les lignes.
Et surtout le choix de départ est mauvais. Si dans le formulaire le champ "Nom prénom" contient 'Victor Hugo', jamais on ne peut trouver l'auteur avec A.Nom LIKE '%$auteur%' OR A.prenom LIKE '%$auteur%'.
Salut,
merci pour ton aide mais malheureusement le problème n'est pas résolu et tu as raison c'est auteur pas auteut ;)
merci pour ton aide mais malheureusement le problème n'est pas résolu et tu as raison c'est auteur pas auteut ;)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
jordane45
Messages postés
38145
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 avril 2024
4 650
Modifié par jordane45 le 22/04/2015 à 01:12
Modifié par jordane45 le 22/04/2015 à 01:12
Comme le suggère Jee Pee.. si un des champs AUTEUR ou TITRE n'est pas renseigné dans ton formulaire... normal que ça te retourne plus de lignes que ce que tu souhaites......
A la limite il faudrait procéder ainsi :
A la limite il faudrait procéder ainsi :
if(isset($_POST)) { $titre=isset($_POST['titre']) && $_POST['titre'] !='' ? $_POST['titre'] : NULL; $auteur=isset($_POST['auteur']) && $_POST['auteur'] !='' ? $_POST['auteur'] : NULL; $strAuteur = $auteur ? " (A.Nom LIKE '%$auteur%' OR A.prenom LIKE '%$auteur%' )" : ''; $strTitre = $titre ? " L.Titre LIKE '%$titre%' " // a remplacer par un OR si tu veux que ça soit l'un OU l'autre $And_titre = $auteur ? " AND " : '' ; if($titre || $auteur ){ $req="SELECT L.Titre ,L.ISBN ,A.Nom ,A.prenom ,T.nom FROM livre L LEFT JOIN auteur A ON A.id_auteur = L.id_auteur LEFT JOIN theme T ON T.id_theme = L.id_theme WHERE $strAuteur $And_titre $strTitre "; // le temps des tests pour voir la requête... et éventuellement // la tester directement dans ta BDD : echo "<pre><b>Requête :</b><br>".$req."</pre>"; $oPDOStatement=$idcom->query($req); $oPDOStatement->setFetchMode(PDO::FETCH_OBJ); while ($row = $oPDOStatement->fetch()) { echo "<tr> <td>".$row->id_livre."</td> <td>".$row->Titre."</td> <td>".$row->ISBN."</td> <td>".$row->Nom."</td> <td>".$row->prenom."</td> <td>".$row->Nom."</td> </tr>"; } }else{ echo "<br> Aucun Titre ou Auteur passé en paramètre !"; } }// fin du IF POST