2010-05-17 4 views
0

Je souhaite pouvoir effectuer une recherche dans une table MySQL en utilisant les valeurs d'une chaîne de recherche, de l'URL et afficher les résultats sous forme de sortie XML.Recherche dans une table MySQL & PHP

Je pense que j'ai le formatage et déclare les variables de la chaîne de recherche vers le bas. Le problème que j'ai est la recherche de toute la table, j'ai regardé SO pour les réponses précédentes, et ils semblent tous avoir à déclarer chaque colonne de la table à rechercher.

Ainsi, par exemple ma mise en page de base de données est la suivante:

**filesindex** 
-filename 
-creation 
-length 
-wall 
-playlocation 

Tout d'abord serait la suivante appropriée:

$query = "SELECT * FROM filesindex WHERE filename LIKE '".$searchterm."%' 
      UNION 
      SELECT * FROM filesindex WHERE creation LIKE '".$searchterm."%' 
      UNION 
      SELECT * FROM filesindex WHERE length LIKE '".$searchterm."%' 
      UNION 
      SELECT * FROM filesindex WHERE wall LIKE '".$searchterm."%' 
      UNION 
      SELECT * FROM filesindex WHERE location LIKE '".$searchterm."%'"; 

Ou idéalement, est-il un moyen plus facile qui implique moins hardcoding à chercher une table.

Des idées?

Merci

Répondre

2

Ne pas utiliser UNION, vous pouvez les termes de recherche de la chaîne en utilisant AND ou OR. Et oui, vous devez coder les champs en dur si vous voulez garder votre code autrement simple.

$query = "SELECT * FROM filesindex WHERE filename LIKE '".$searchterm."%' 
     OR creation LIKE '".$searchterm."%' 
     OR length LIKE '".$searchterm."%' 
     OR wall LIKE '".$searchterm."%' 
     OR location LIKE '".$searchterm."%'"; 
2

La requête peut être réécrite comme celui-ci

$query = "SELECT * FROM filesindex WHERE filename LIKE '".$searchterm."%' 
      OR creation LIKE '".$searchterm."%' 
      OR length LIKE '".$searchterm."%' 
      OR wall LIKE '".$searchterm."%' 
      OR location LIKE '".$searchterm."%'"; 

si vous voulez trouver tous les enregistrements pour lesquels l'une des colonnes contient le terme de recherche.

1

Au lieu d'union, utilisez OR:

$query = "SELECT * 
      FROM filesindex 
      WHERE filename LIKE '".$searchterm."%' 
      OR  creation LIKE '".$searchterm."%' 
      OR  length LIKE '".$searchterm."%' 
      OR  wall LIKE '".$searchterm."%' 
      OR  location LIKE '".$searchterm."%'"; 

Mais - je vous recommande d'utiliser un système de recherche basé sur des fichiers comme Zend Lucene au lieu de MySQL.

Questions connexes