2010-10-06 94 views
1

我試圖創建一個很好的小搜索語句,它根據返回的內容使用不同的搜索詞搜索多個字段。我basiclly設置我想要搜索的順序,如果找不到一個搜索詞嘗試下一個。不過,我正在使用WHERE子句來分離僅搜索一種類型的數據。目前我收到一些奇怪的結果返回,因爲我不認爲我的順序是正確的,似乎我的WHERE子句被忽略。如何在使用LIKE搜索語句時在MySQL中使用OR語句

這裏是我的發言(我USIG PHP):

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']."%' "); 

預先感謝您。

回答

1

爲什麼不使用全文搜索功能?

需要更改表結構以創建全文搜索索引。

ALTER TABLE item ADD FULLTEXT (item_name, item_description); 

然後你的查詢變成:

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'] . "); 
"); 

簡單,準確,快捷。

+0

如果你喜歡它,你需要看到Postgre的FTS功能。您可以設置字段的相關性。很好的文章,教程等。 – Dave 2010-10-08 01:14:38

1

將右括號到語句的結尾:

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

它是在錯誤的地方你的括號內。以下是正確的代碼:

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']."%')");