Problème Résultat requete mysql
AAAid
-
jordane45 Messages postés 40051 Date d'inscription Statut Modérateur Dernière intervention -
jordane45 Messages postés 40051 Date d'inscription Statut Modérateur Dernière intervention -
Salut à tous,
voilà mon problèmes se situe dans mon code et pour être plus précis dans la requete sql suivante :
le résutat que je veux obtenir sont les informations du livre obtenu à partir de la recherche effectué par l'utilisateur soit par le nom ou prénom auteur et le titre de livre alors que dans la requete il affiche tout les livres ainsi que tout les auteurs .
merci d'avance
voilà mon problèmes se situe dans mon code et pour être plus précis dans la requete sql suivante :
<table>
<tr id="entetetab">
<td><b>ID</b></td><td><b>Titre</b></td><td><b>ISBN</b></td><td><b>Nom Auteur</b></td><td><b>Prénom Auteur</b></td>
<td><b>Theme</b></td>
</tr>
<?php
if(isset($_POST['titre']) && isset($_POST['auteur']))
{
$titre=$_POST['titre'];
$auteur=$_POST['auteur'];
$req="SELECT `livre`.`id_livre`, `livre`.`Titre`, `livre`.`ISBN`,`auteur`.`Nom`, `auteur`.`prenom`,`theme`.`Nom` FROM `livre`,`auteur`,`theme`
WHERE `livre`.`id_auteur`=`auteur`.`id_auteur` AND `livre`.`id_theme`=`theme`.`id_theme` AND `livre`.`Titre` LIKE '%$titre%' OR `auteur`.`Nom` LIKE '%$auteut%' OR `auteur`.`prenom` LIKE '%$auteut%'";
$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>";
}
}
$idcom=NULL;
?>
</table>
le résutat que je veux obtenir sont les informations du livre obtenu à partir de la recherche effectué par l'utilisateur soit par le nom ou prénom auteur et le titre de livre alors que dans la requete il affiche tout les livres ainsi que tout les auteurs .
merci d'avance
A voir également:
- Problème Résultat requete mysql
- Resultat foot - Télécharger - Vie quotidienne
- Lexer resultat - Télécharger - Sport
- Mysql community download - Télécharger - Bases de données
- 5/90 resultat - Forum Linux / Unix
- Récupérer un résultat selon la date d'aujourd'hui ✓ - Forum Excel
5 réponses
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
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
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
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