Aller au contenu

Elargir une requête


nadegeva

Sujets conseillés

Bonjour,

C'est un peu flou comme ça.

J'ai crée un moteur de recherche multicritères qui fonctionne bien et simplement.

Le code en ferait certainement rigoler ou halluciner plus d'un, but it works!!

La page résultats s'affiche et j'aimerai en cliquant sur un lien élargir ma recherche mais sur un seul critère.

Ex : je veux acheter une voiture, je choisi un modèle, l'année, le prix et le département dans laquelle la trouver.. .>>>pas ou peu de resultats

je souhaiterai donc élargir à la région.

Comment puis-je faire? repasser tous mes valeurs dans l'url ??

Merci

Lien vers le commentaire
Partager sur d’autres sites

Oui mais il faut d'abord :

- détecter le critère qui a fait échouer la première requête pour l'éliminer dans la seconde requête.

- détecter un critère de remplacement plus large qui lui, fournit des résultats à coup sûr.

Donc, lorsque la première requête se déroule, il faut en cas d'échec lancer un algorithme de détection. Je te donne ma petite idée, mais d'autres en auront peut-être une meilleure... :blush:

Voici la boucle sur les critères:

1. Test de la requête en supprimant un critère.

Je commence par retirer le premier critère de la requête

-A .

si j'obtiens des résultats, je remplace ce critère par un critère "plus large" (grâce à une table de correspondance), et je re-teste la requête avec le nouveau critère.

si je n'obtiens pas de résultats retour à 1. en retirant le critère suivant

-B .

si j'obtiens des résultats, je renvoie la proposition "pas de résultat, voulez vous élargir la recherche à [le critère de remplacement] ?"

si je n'obtiens pas de résultats retour à 1. en retirant le critère suivant.

Si aucun résultat à la fin de la boucle, je renvoie la proposition "pas de résultat, modifiez votre sélection".

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

Tu as plusieurs solution, et donc plusieurs ergonomies différentes à toi de voir celle qui corresponde à tes besoins... J'utiliserais celle-ci, une page de recherche avec le formulaire et tous les paramètres, l'utilisateur effectue sa recherche et les résultats sont affichés en dessous du même formulaire.

Et comme tu disposes des critères de la recherche précédente de l'utilisateur, il te suffit de mettre les valeurs par défaut à ces critères...ainsi lorsque l'utilisateur soumettra le formulaire à nouveau il enverra tous ces critères.

Un exemple avec divers champs de formulaires :

<input type="text" name="q"<?php echo (!empty($_GET['q']) ? ' value="'.htmlspecialchars($_GET['q']).'"' : ''); ?> />

<input type="checkbox" name='toto' value='1'<?php echo ($_GET['toto'] ? ' selected="selected"' : ''); ?> />

<?php
<select name="region">
<?php
// Imaginons que tu récupère des résultats d'une requête sur ta table de régions
while($region = mysql_fetch_array($result)) {
 echo '<option value="'.$region['id'].($_GET['region'] == $region['id'] ? 'selected="selected"' : '').'>'.$region['name'].'</option>';
} ?>
</select>

(Jai volontairement négligé la déclaration des variables afin de raccourci le code)

Ainsi lorsque lutilisateur charge la page pour la première fois sans les données du formulaire il lui est présenté sans valeur par défaut (enfin si tu en veux, libre à toi den fixer) et une fois envoyé les données par défaut sont celle que lutilisateur a envoyées.

Si tu as besoin d'une liste déroulante à sélection multiple le code est légèrement plus long, mais c'est faisable.

P.S: Essaie de poster un minimum de code lorsque tu as une question, cela aide à la compréhension de ton problème...merci d'avance !

**EDIT** La recherche d'un critère trop restrictif est viable lorsque tu n'a pas "trop" de critères et que la logique implique que certains critères sont très restrictif à mon avis...peut être ce que ce cas correspond au tiens, sinon il est difficle de guider l'utilisateur vers une requête qui lui convidenra réellement :S

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...