2011-08-21 51 views
0

我想爲我的網站創建一個搜索查詢類的東西,我知道我可以使用簡單的'%string%'來獲得類似結果的東西,但這意味着你必須輸入您嘗試查找的文章/字符串的文字的確切順序。搜索和多個MYSQL請求排序

例如,如果您輸入「One Three Two」,則只能找到在該字符串中的任意位置具有「One Three Two」順序的文章...並且無法搜索類似以下內容的文章:「One二進三」等

於是我想到了一個解決方案,但我沒有想到的是如何真正制定出解決方案......這是我的思想行動程序:

  1. 爆炸()的字符串輸入到所有單詞中
  2. mysql用%查詢每個單詞一個一個%like%
  3. 如果有所有單詞的文章,它將首先顯示,所以它按同一篇文章的大部分出現次序排序。

就是這樣!所以我只是想知道如果這是甚至可以實現使用PHP?還是我必須回到Perl或其他?

回答

0

當然可以。在MySQL中真正的表達式是1,所以只需將它們加在一起並按順序排列即可。

mysql> select ('ABC' LIKE '%B%') + ('ABC' LIKE '%C%'); 
+-----------------------------------------+ 
| ('ABC' LIKE '%B%') + ('ABC' LIKE '%C%') | 
+-----------------------------------------+ 
|          2 | 
+-----------------------------------------+ 
1 row in set (0.02 sec) 

,只是使用ORWHERE子句,以獲得相匹配的任何物品。

SELECT ... 
    WHERE 'ABC' LIKE '%B%' OR 'ABC' LIKE '%C%' 
0

您可能還想考慮全文搜索。設置起來要困難得多,但可以使搜索更像搜索引擎。找到具有相關關鍵字的額外結果可能非常有價值。此外,應該處理爆炸的短語(三個詞放在一起)內部,你只要把它傳遞什麼樣的用戶提供了:

http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html

0

創建查詢,使得它的各種搜索的結合,跟隨你的主意,讓前面的最匹配:

例如,對於你3個字

select 1 as levl, text from table where text like '%w1%' or text like '%w2%' or text like '%w3%' 
union 
select 2 as levl, text from table where text like '%w1%' or text like '%w2%' 
union 
select 2 as levl, text from table where text like '%w2%' or text like '%w3%' 
union 
select 2 as levl, text from table where text like '%w1%' or text like '%w3%' 
union 
select 3 as levl, text from table where text like '%w1%' 
union 
select 3 as levl, text from table where text like '%w2%' 
union 
select 3 as levl, text from table where text like '%w3%' 
order by levl 

注意,一個字的部分提取爲好。如果你只想要整個單詞,請在php中解析結果中的每一行,以消除不正確的結果。 Sql將主要選擇器,你做煉油廠。