Problème Résultat requete mysql
Fermé
AAAid
-
Modifié par jordane45 le 21/04/2015 à 19:17
jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 - 22 avril 2015 à 01:08
jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 - 22 avril 2015 à 01:08
A voir également:
- Problème Résultat requete mysql
- Lexer resultat - Télécharger - Sport
- Mysql community server - Télécharger - Bases de données
- Resultat foot - Télécharger - Vie quotidienne
- Resultat loto 5/90 - Forum Linux / Unix
- Mysql error in file: /engine/classes/mysql.php at line 53 ✓ - Forum Réseaux sociaux
5 réponses
jee pee
Messages postés
40574
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
20 décembre 2024
9 460
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
38346
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 décembre 2024
4 717
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
40574
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
20 décembre 2024
9 460
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
38346
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 décembre 2024
4 717
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