|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Étudiant Inscription : juin 2010 Messages : 5 ![]() |
Bonjour,
je rencontre quelques soucis avec l'exécution d'une requête SQL. Je vais tenter d'illustrer ça simplement : On a une table "Animaux" qui contient les champs suivants : - idAnimal - le type de l'animal (chien, chat...) - le prénom de l'animal reliée à une table "Personne" (via une table d'association) - idPersonne - nom - prénom NB : Une personne peut posséder un ou plusieurs animaux Je souhaite créer un formulaire de recherche avec un champ par type d'animaux. L'utilisateur devra entrer le nom de l'animal. Par exemple, si l'utilisateur a entré : - chat : Félix - chien : Milou le résultat de la recherche doit renvoyer le nom de la personne qui possèdes le chat Félix ET le chien Milou. Code :
J'espère avoir été claire, merci d'avance pour vos réponses |
||
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() Yannick Ingénieur Etudes & Developpements Inscription : février 2006 Messages : 1 125 ![]() |
Enlevez toutes vos parentheses qui ne vous servent a rien.
Pourquoi utilisez vous une jointure externe, puisque vous voulez trouver les personnes ayant un animal ? Quel est le soucis exact de l'execution de votre requete (syntaxe, retour different de l'attente, ...) ?
__________________
Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac) |
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Étudiant Inscription : juin 2010 Messages : 5 ![]() |
Merci pour la réponse rapide, je rectifie pour les jointures externes et parenthèses.
Le souci c'est que le résultat renvoyé n'est pas le bon. Par exemple Pierre possède le chat Félix et le chien Milou. Lors de la recherche via le formulaire si je renseigne uniquement le champ chat : Félix, le résultat affiche Pierre si je renseigne uniquement le champ chien : Milou, le résultat affiche Pierre si je remplis les 2 champs - chat : Félix - chien : Milou la recherche ne renvoie aucun résultat... Je pense qu'il y a un conflit étant donné que je recherche 2 noms d'animaux différents pour une même personne. Peut-être avec un système de sous-requête ? Mais je ne suis pas du tout sûre de moi, et ce que j'ai testé jusque là n'a pas fonctionné |
|
|
00
|
|
|
#4 | ||
|
Membre émérite
![]() Inscription : août 2008 Messages : 835 ![]() |
Bonjour,
Vous pouvez remplacer le AND de votre filtre par un OR pour récupérer les lignes satisfaisant les deux conditions, puis ne conservez que les noms qui satisfont les deux avec une clause HAVING : Code :
|
||
|
|
00
|
|
|
#5 | |||
![]() ![]() |
C'est effectivement ici qu'il y a problème :
Citation:
Il faut donc : - utiliser IN suivi de la liste des noms ; - compter le nombre d'animaux possédés par personne ; - ne garder que les personnes dont le nombre d'animaux correspond au nombre de noms. Code :
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|||
|
00
|
|
|
#6 |
|
Invité de passage
![]() Étudiant Inscription : juin 2010 Messages : 5 ![]() |
En réalité ma requête est plus importante : je sélectionne auparavant d'autres informations, le HAVING count ne peut donc pas être utilisé ici.
Après quelques recherches je pense créer plusieurs requêtes et recouper les informations à l'aide d'un array_intersect(). array array_intersect ( array $array1 , array $array2 [, array $ ... ] ) array_intersect() retourne un tableau contenant toutes les valeurs de array1 qui sont présentes dans tous les autres arguments array2, ..., etc. Notez que les clés sont préservées. Merci tout de même pour vos réponses |
|
|
00
|
|
|
#7 |
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 641 ![]() |
|
|
|
10
|
Copyright © 2000-2012 - www.developpez.com