2010-10-06 1 views
1

J'essaye de créer une bonne petite instruction de recherche qui recherche des champs multiples en utilisant les différents termes de recherche en fonction de ce qui est retourné. Je suis fondamentalement en train de définir un ordre dans lequel je veux rechercher si un terme de recherche n'est pas trouvé, essayez le suivant. Cependant, j'utilise une clause WHERE pour séparer un seul type de données. Actuellement, je reçois des résultats étranges parce que je ne pense pas que ma commande est correcte, il semble que ma clause WHERE soit ignorée.Comment utiliser l'instruction OR dans MySQL tout en utilisant l'instruction de recherche LIKE

ici est ma déclaration (je suis PHP usig):

mysql_query("SELECT * FROM item AS i LEFT JOIN country AS c ON i.country_id = c.country_id WHERE i.item_status = 'active' AND (i.item_name LIKE '%".$_SESSION['item']."%') OR i.item_description LIKE '%".$_SESSION['description']."%' OR i.item_name LIKE '%".$_SESSION['description']."%' "); 

Merci à l'avance.

Répondre

1

Pourquoi n'utilisez-vous pas la fonctionnalité de recherche en texte intégral?

Besoin de modifier la structure de la table pour créer un index de recherche fulltext.

ALTER TABLE item ADD FULLTEXT (item_name, item_description); 

Vos requêtes se tourne vers:

mysql_query(" 
SELECT * FROM item AS i LEFT JOIN country AS c ON i.country_id = c.country_id 
WHERE i.item_status = 'active' AND 
MATCH (i.item_name, i.item_description) 
AGAINST (" . $_SESSION['item'] . " " . $_SESSION['description'] . "); 
"); 

simple, précise et plus rapide.

+0

Si vous l'aimez, vous devez voir la fonction FTS de Postgre. Vous pouvez définir la pertinence pour les champs. Nice pour les articles, tutoriels, et ainsi de suite. – Dave

1

Déplacer la parenthèse droite à la fin de l'instruction:

SELECT * 
FROM item AS i LEFT JOIN country AS c 
ON i.country_id = c.country_id 
WHERE i.item_status = 'active' 
AND (i.item_name LIKE '%".$_SESSION['item']."%' 
OR i.item_description LIKE '%".$_SESSION['description']."%' 
OR i.item_name LIKE '%".$_SESSION['description']."%') 
1

Ce sont vos parenthèses au mauvais endroit. Voici le code correct:

mysql_query("SELECT * FROM item AS i LEFT JOIN country AS c ON i.country_id = c.country_id WHERE i.item_status = 'active' AND (i.item_name LIKE '%".$_SESSION['item']."%' OR i.item_description LIKE '%".$_SESSION['description']."%' OR i.item_name LIKE '%".$_SESSION['description']."%')");