Page 1 sur 1

recherche multicritères en une seule requête

Posté : 03 févr. 2019, 12:03
par cris84
Bonjour à tous,

voilà, j'ai un formulaire de recherche qui comprend 7 champs
Titre, sexe, département, ville, catégorie, age mini et age maxi

est-il possible de faire une seule requête qui prendrait tous les cas de figure de l'utilisateur ? Si j'en crois mes recherches il faudrait que je fasse 128 autres requête comme celle-ci que j'ajoute avec $sql_add :

$sql_add = 'AND titre LIKE "%'.$_GET['search'].'%" or description LIKE "%'.$_GET['search'].'%" AND nom_cat LIKE "%'.$_GET['cat'].'%" AND  aa.id_dpt = "'.$_GET['id_departement'].'" AND aa.id_ville = "'.$_GET['id_ville'].'" AND aa.sexe = "'.$_GET['sexe'].'" AND aa.age >="'.$_GET['age_mini'].'" AND aa.age <="'.$_GET['age_maxi'].'"';
	}

La méthode que s'utilise est GET et je vous donne ma requête actuel :

$annonce = $bdd->query ("SELECT aa.sexe, aa.age, aa.titre, aa.description, aa.id_cat, ac.nom_cat, am.pseudo, aa.date_annonce, dpt.departement, v.ville, ti.id_annonce, ti.image_name FROM add_annonces as aa
				LEFT JOIN add_membres as am ON aa.id_membre=am.id
				LEFT JOIN add_cat as ac ON aa.id_cat=ac.id
				LEFT JOIN tbl_images as ti ON aa.id=ti.id_annonce 
				INNER JOIN ville as v ON aa.id_ville=v.id_ville
				INNER JOIN departement as dpt ON aa.id_dpt=dpt.id_departement
					WHERE  aa.valide = '1' $sql_add  GROUP BY ti.id_annonce ORDER BY date_annonce DESC LIMIT $limit_start, $pagination ");

Merci de vos suggestions

Re: recherche multicritères en une seule requête

Posté : 03 févr. 2019, 13:38
par @rthur
Si c'est pour un moteur de recherche tu risques d'être rapidement limité avec des LIKE, et il n'y aura pas de calcul de pertinence donc le résultat risque d'être déceptif.

MySQL a une fonctionnalité de recherche Fulltext qui permet justement d'améliorer la recherche.
Voici quelques pistes et exemples :
https://www.petefreitag.com/item/477.cfm
https://blog.axe-net.fr/recherche-perti ... -fulltext/

Si sur ton site la recherche est fondamentale, alors il faut que tu utilises un outil dédié à la recherche.
Les deux qui ont le vent en poupe à l'heure actuelle sont Elasticsearch (opensource) et Algolia (commercial mais beaucoup plus simple et pas très cher).
https://www.grafikart.fr/tutoriels/elastic-search-626
https://www.algolia.com/