|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre à l'essai
![]() Développeur Web Junior Inscription : novembre 2009 Messages : 124 ![]() |
Bonjour,
Je développe une application en php avec ZEND Framework, et j'aurai besoin de faire un moteur de recherche multi critères qui contiendra un champ texte pour saisir les mots clés et des listes déroulantes pour sélectionner en tenant compte du fait que le résultat peut s'afficher même si les autres choix ne sont pas fait. je n'arrive pas à afficher un résultat avec la requête que j'ai fait. j'aimerai un petit peu d'aide si quelqu'un peut bien le faire. Merci d'avance. |
|
|
00
|
|
|
#2 |
![]() ![]() |
Cela tient plus du PHP que de MySQL ton problème.
Il faut créer la requête dynamiquement en PHP selon les choix faits par l'utilisateur et envoyer cette requête au SGBD. Si c'est ce que tu as fait mais que tu n'as pas le résultat attendu, commence par nous montrer la requête réellement envoyée au serveur et ce qu'elle est censée faire.
__________________
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
|
|
|
#3 | ||
|
Membre à l'essai
![]() Développeur Web Junior Inscription : novembre 2009 Messages : 124 ![]() |
Merci pour ta réponse,
alors je vais commencer par t'envoyer la requête que j'ai fait mais qui n'ai pas optimale car elle permet juste de sélectionner une offre en tapant un mot clés et en sélectionnant un contrat, un domaine et un lieu( je travaille sur le recherche des offres d'emplois) mon moteur de recherche contient les champs suivant: mots clés : champ text type de contrat : liste déroulante domaine d'activité : liste déroulante lieu : liste déroulante donc j'aimerai donner la possibilité de saisir plusieurs mots clés et prendre le fait de ne pas sélectionner un contrat ou un domaine ou un lieu( donc avoir un résultat même si tous les critères ne sont pas remplis) la fonction que j'ai utilisé est la suivant ( dans me modèle: je travail en MVC): Code :
|
||
|
|
00
|
|
|
#4 | |||
![]() ![]() |
Ne t'embête pas avec les apostrophes inversées, ajoutées par phpMyAdmin quand il restitue les requêtes ; ça ne te sert à rien puisque tu as correctement nommé tes tables et colonnes sans espaces ni caractères qui pourraient être mal interprétés ni mots réservés SQL.
Citation:
Comme les premières jointures sont des jointures internes, tu peux mettre les restrictions sur la langue dans le WHERE. Comme je l'ai dit dans mon précédent message, il faut construire la requête en fonction de l'existence d'une valeur dans les variables issues du formulaire. GROUP BY sans fonction de groupage (MAX, MIN, AVG, SUM, COUNT) ne sert pas à grand chose et je ne suis pas sûr que dans ton cas tu aies besoin d'un DISTINCT. En plus il faudrait que toutes les colonnes du SELECT ne faisant pas l'objet d'une fonction de groupage, c'est à dire ici toutes les colonnes du SELECT, figurent aussi dans le GROUP BY. Cette partie donnerait une erreur dans tout SGBD respectant mieux la norme SQL que le trop permissif MySQL ! Globalement, cela devrait donner ce code : 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
|
|
|
#5 |
|
Membre à l'essai
![]() Développeur Web Junior Inscription : novembre 2009 Messages : 124 ![]() |
Merci pour cette réponse rapide,
La requête que tu m'as donné marche très bien sauf qu'elle donne le même résultat que la mienne, ca que je n'arrive pas à faire c'est d'avoir un résultat en tapant juste un mot clés donc même en ne sélectionnant pas un domaine ou un contrat ou un lieu ou même en sélectionnant juste un des éléments d'une lista déroulante, en gros j'aimerai que la recherche donne un résultat en fonction du choix de l'utilisateur même si tous les critères ne sont pas remplis,( donc comment donner la possibilité d'avoir un résultat en ayant les listes déroulante null ou ayant un identifiant) Merci. |
|
|
00
|
|
|
#6 |
|
Membre à l'essai
![]() Développeur Web Junior Inscription : novembre 2009 Messages : 124 ![]() |
j'ai oublié de parler du "langCode", c'est que les offres seront affichées dans plusieurs langues en fonction d'un drapeau qui sera sélectionné , en plus du fait que l'utilisateur peut taper un ou plusieurs mots cles, j'ai utilisé la fonction explode mais ça ne marche pas( j'ai fait $chaine= explode(" ",$motcles): une erreur fait que la requête ne donne aucun résultat.
|
|
|
00
|
|
|
#7 | ||
![]() ![]() |
Si tu as un peu examiné mon code, tu auras constaté que la requête se construit dynamiquement en fonction de l'existence ou non d'une valeur pour les paramètres passés à la fonction. Au minimum, la requête est celle-ci :
Code :
À toi de voir comment sont alimentées les paramètres dans l'appel de la fonction, de tester leur valeur, ainsi que le texte exact de la requête, avec Zend_Debug, bref, de déboguer ton appli. Ici je n'ai donné que le principe mais c'est évidemment à ajuster au reste de l'appli.
__________________
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 ! |
||
|
10
|
|
|
#8 | ||
|
Membre à l'essai
![]() Développeur Web Junior Inscription : novembre 2009 Messages : 124 ![]() |
Après avoir retravailler la requête, finalement elle donne un bon résultat:
elle est comme suit: Code sql :
|
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com