begin process at 2012 05 31 05:59:20
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Base de données

 > 

MySQL

 > 

Plusieurs mots clé dans le champ recherche, comment faire ?


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Plusieurs mots clé dans le champ recherche, comment faire ?

mardi 1 juillet 2008 à 10:42:53 | Plusieurs mots clé dans le champ recherche, comment faire ?

fxfx92

Bonjour à tous,

J'ai un problème sur lequel je cale, et j'aimerais bien votre avis :
Je voudrais faire un moteur de recherche pour une association pour chercher des membres. Je voudrais qu'on puisse faire des recherche par code postal, département ou par ville, séparés par des virgules dans le champ de recherche.
Exemple : lyon, 75, 69008 > sort les membres habitant à Lyon, dans le département 75 ou ayant le code postal 69008.

J'isole mes mots clé avec :
$mots = str_replace(",", " ", $mots);
$tab=explode(" " , $mots); //

Dans ma table, j'ai une colonne pour la ville, une pour le département, et une pour le code postal.

Est-ce qu'il faut que je regroupe ces 3 informations (ville, dep, cp) dans une seule colonne (que je passerais en index?) et faire les recherches dedans ou bien faut il faire un "explode" des mots-clé et faire une recherche dans les 3 colonnes ???

Aussi, est-ce que qqun aurait un lien qui présente un script qui ressemblerait à ce que je voudrais faire ?

Merci infiniment pour votre aide !
mardi 1 juillet 2008 à 11:26:13 | Re : Plusieurs mots clé dans le champ recherche, comment faire ?

Bling 182

Tes 3 colonnes ne peuvent pas etre regroupées (a la limite, 75 et 69008 ca peut aller dans la meme, et encore... parce que avec le CP, tu as le département. Mais pas l'inverse.
Donc il va falloir que tu recherche dans les 2 (3) colonnes.

--
Développeur web freelance - Bling182 Dev : http://freelancedev.ovh.org - http://www.bling182.fr
mardi 1 juillet 2008 à 14:12:16 | Re : Plusieurs mots clé dans le champ recherche, comment faire ?

neigedhiver

Salut,

Comme le souligne Bling 182, le code postal contient le département. Tu peux donc te passer de ce dernier, puisque tu peux le retrouver (un vulgaire substr() suffit, et un malheureux petit tableau indexé pour avoir les noms des départements), mais à l'unique condition que la recherche d'un département se fasse par son numéro, et non par son nom.

Ensuite, pas besoin de "script" pour cette recherche : le plus important, c'est la requête SQL. Ensuite, c'est de l'affichage classique (éventuellement pour séparer les résultats selon que c'est le code postal/département ou la ville qui correspond à ce qui est recherché, mais c'est facultatif).

Donc, la requête SQL pourrait ressemble à quelque chose comme ça :

SELECT id, nom, prenom, etc FROM membres WHERE ville='%recherche%' OR code_postal='%recherche%';

Le mot "recherche" est à remplacer par une variable PHP lors de la construction de la requête en PHP.
Tu peux éventuellement choisir de trier selon la date d'adhésion, le nom de famille, etc.


Neige

N'hésitez pas à lire la doc de PHP avant de poser des questions triviales...
mardi 1 juillet 2008 à 18:31:36 | Re : Plusieurs mots clé dans le champ recherche, comment faire ?

fxfx92

Salut, merci pour vos réponses, c'est beaucoup plus clair maintenant pour la requête!

Je parlais de script car toutefois, le gros problème qui m'est posé en amont (enfin sauf si vous avez une meilleure idée bien sûr ), c'est de découper les mots clé de la recherche pour pouvoir faire ensuite mon Select.

Je m'explique :

Si qqun fait un recherche du genre : 75001, 75002, 75008, Suresnes , le résultat devra afficher la liste des membres habitant dans ces 3 départements et dans la ville de Suresnes.
Pour ménager les ressources du serveur en ligne (il y a tout de même 65.000 membres), je préfère que les codes postaux soit uniquement recherché dans la colonne "Code Postal", idem pour les villes.
Je pensais donc découper les mots recherchés avec mon explode (ca c'est bon), puis avec les regex identifier les mots qui sont des codes postaux des noms de ville (ca c'est bon aussi). Mon probleme est qu'il faudra ensuite compter ces codes postaux et ville et composer ma requete Select en conséquence et selon donc le nombre de codes postaux ou de villes choisis en recherche.

Exemple : SELECT id, nom, prenom, etc FROM membres WHERE ville='%ville1%' OR ville='%ville2%' OR code_postal ='%code_postal1% OR code_postal ='%code_postal2% OR code_postal ='%code_postal3%;

Est-ce que vous avez une idée de comment procéder s'il vous plait ?
A moins que je fasse fausse route sur la construction en amont de la requête ?

Merci pour votre aide, c'est vraiment sympa !


mardi 1 juillet 2008 à 18:44:23 | Re : Plusieurs mots clé dans le champ recherche, comment faire ?

neigedhiver

Moi, ça me choque pas.
Faudrait bencher mysql pour voir comment optimiser la requête au mieux.
Faut quand même pas oublier les index, à bien définir (ça, c'est le plus tendu en fait). La doc de MySQL est assez peu causante sur le sujet... Des livres spécialisés seraient probablement plus pertinents.

D'autres pistes à réfléchir :
- une mise en cache des recherches (plus exactement, un index construit lors de l'enregistrement de membres, etc)
- les regex dans MySQL
Quant à une recherche FULLTEXT, je pense que c'est pas vraiment approprié pour une recherche sur un champ (en l'occurrence la ville) qui contient le plus souvent un seul mot.


Neige

N'hésitez pas à lire la doc de PHP avant de poser des questions triviales...
mardi 1 juillet 2008 à 20:11:05 | Re : Plusieurs mots clé dans le champ recherche, comment faire ?

fxfx92

Re,

Yep merci pour tes tuyaux, je pensais effectivement à utiliser un index. Et pour les requêtes je vais faire comme tu me dis et voir combien de temps elles prennent. Ca sera sûrement plus long que des recherches dans des colonnes ciblées, au pire je m'en contenterais mais ca va sûrement me démanger de savoir qu'il y a une solution plus économe et rapide...Je pourrais toujours améliorer le code par la suite...




Cette discussion est classée dans : code, recherche, champ, mots, clé


Répondre à ce message

Sujets en rapport avec ce message

recherche inerne par mots clé [ par jeuxfree ] bonjour je suis novice et je cherche a installer un moteur de recherche interne car je propose des jaquettes et j'aimerais que les internautes les tro Probleme script moteur de recherche [ par McGyver59 ] Bonjour Sur le web j'ai trouvé un moteur de recherche interne pour mon site il fonctionne trés bien mais j'ai un soucis avec. Meme si je ne met rien Problèmes de REGEX [ par bobino75 ] Bonjour à vous, Je commence à travailler avec les REGEX et je me retrouve avec quelques problèmes. Je fais une recherche dans une base de données av Class not found [ par lilyy59 ] Bonjour J'ai fait une page avec toute mes requetes dans une class salarie, et dans une autre page j'appelle ma classe mais j'ai un [code=autre]Fatal code pour recherche intuitive [ par tif27940 ] Bonjour, j'ai un champ de recherche pour un nom ou un prénom et j'aimerai que lorsque un utilisateur commence a écrire un nom ou prénom des suggesti Checkbox affiche une valeur dans un champ text [ par rodlake ] Bonjour Je suis débutant en PHP et j'essaie de faire un formulaire d'évaluation. Le formulaire aura plusieurs questions sous ce format: Question 1 ou creation d'un moteur de recherche php dans bdd [ par jbtv ] Bonjour a tous ! je recherche quelqu un qui pourrai m'aidé à créé un moteur de recherche du type [code=html] Recherche par : <sele verification sur chaque champ [ par paluma ] bonjour; j'ai un code AJAX psse1<input type="password" name="pseudo" onKeyUp="verifPseudo(this.value)" Moteur recherche SQL php [ par fregeal ] Bonjour Je cherche un moyen d'avoir un champs de recherche sql qui affiche les resultats sous forme d'un tableau mais tous les scritps que j'ai pus t Récuperé un champ entre deux dates [ par c3d94 ] Bonjour, J'essaye de faire un moteur de recherche avec deux dates, celui ci après la recherche me ferai un tableau de mes champs et par la suite un ca


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,874 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales