2010-12-15 90 views
1

Je développe une application web, dont une partie permet à un utilisateur de parcourir plusieurs champs sur 7 tables dans une base de données.Conseil sur l'écriture d'une fonction de recherche avec PHP et MySQL

Les utilisateurs peuvent rechercher (par exemple)

Prénom - texte
Nom de famille - texte
Taille - sélectionner
âge Minumum- sélectionner
âge maximum- sélectionner
couleur préférée - sélectionnez
Collège - sélectionnez

... et beaucoup plus encore

Le formulaire de recherche HTML contiendra des champs de texte, de nombreuses listes déroulantes et des cases à cocher. Quelqu'un peut-il offrir des conseils, de bonnes pratiques, des modèles de conception ou des ressources pour aider avec ce genre de problème.

Un grand merci à l'avance.

+0

Je voudrais aller avec Zend_Search_Lucene ou un autre moteur de recherche – Vytautas

Répondre

1

Vous devez utiliser l'opérateur LIKE dans les caractères de recherche SQL et de caractères génériques.

SELECT 
    * 
FROM 
    users 
WHERE 
    first_name LIKE '%".$first_name."%' || 
    age > '".$age."' 
+0

Mais s'il vous plaît utiliser des espaces réservés ou quelque chose pour empêcher l'injection SQL. http://bobby-tables.com/ – Nathan

0

Je ne voudrais pas essayer de construire une fonction de recherche par mot clé dans SQL. Vous devriez lire la fonction intégrée de recherche en texte intégral de MySQL. Tenter une recherche complète par le biais de SQL de base prendra du temps à développer et lent à l'exécution.

L'idée de base d'une recherche en texte intégral est une combinaison de deux systèmes. Tout d'abord, l'indexeur, qui lit votre base de données pour les mots clés et crée un "index" d'entre eux. Deuxièmement, le chercheur, qui regarde à travers le catalogue créé par l'indexeur pour créer des résultats de recherche.

Il existe des outils tiers - Lucene, Xapian, Sphinx - qui regroupent leur propre indexeur/chercheur. J'ai utilisé Xapian pour un certain succès.

+0

oui je vois ce que vous voulez dire, mais dans ce cas, ils ne chercheront pas à travers de gros blocs de texte, donc cela pourrait être trop compliqué la plupart des champs seront == au lieu de LIKE – Ash

+0

Vous avez raison. Je n'ai pas lu la question assez attentivement. Votre interface utilisateur est suffisamment spécifique pour qu'une recherche SQL ne soit pas trop mauvaise. – walkingTarget

0

Le formulaire de recherche HTML contiendra des champs de texte, de nombreuses listes déroulantes et des cases à cocher. Quelqu'un peut-il offrir des conseils, des pratiques exemplaires, des modèles de conception ou des ressources pour aider à ce genre de problème.

Je suggérerais que Google illustre la meilleure interface utilisateur pour la recherche. Ne me donnez pas beaucoup de champs fiddly, juste un champ de texte afin que je puisse taper "Shirley Jones UAF"

+0

malheureusement, cela ne répond pas à la question du tout. La recherche de Google est principalement la recherche de gros blocs de texte pour les mots-clés. Le mien n'est rien comme ça. – Ash

+0

Etes-vous sûr que vos utilisateurs préfèreraient le formulaire plus compliqué? La plupart des sites ont de nos jours une seule recherche textuelle dans le coin supérieur droit, peut-être avec une "recherche avancée" que les utilisateurs n'utilisent pratiquement jamais. – Nathan

+0

son application Web assez spécifique permettant aux gens de sélectionner des individus pour des emplois en fonction d'un certain nombre de critères – Ash