2012-03-12 69 views
3

計數和訂單的結果我有這樣的查詢:PHP MySQL的發現,通過計數

$sql = "SELECT * 
      FROM global_info 
      WHERE title LIKE '%$string%' 
       OR tag LIKE '%$string%' 
       OR body LIKE '%$string%'"; 

我怎麼能算結果的每一行的號碼,然後根據計數結果進行排序?

例如 行1:

標題:

Adricatic海尼斯照片

身體:

這是我和我的朋友在亞得里亞海海,在黑山的某個地方。 阿德里奇海的顏色是驚人的。

標籤:

亞得里亞海,照片

行2:

標題:

Adricatic海

身體:

採取中午

標籤:

亞得里亞海,照片

而且有人搜索:

亞得里亞海照片

行1比2行更多的成果,這將是在查詢結果中的首位。

+0

實際上,在給定的示例數據中沒有搜索到'LIKE'%adriatic sea photo%''的結果,因爲沒有一列顯示包含該確切短語。 – 2012-03-12 15:35:38

+2

不知道是否可能在PHP以外(僅在sql查詢中),但可以使用php count()並檢查每個類別中選擇了多少結果。 – 2012-03-12 15:37:14

+0

您最好使用FULLTEXT索引並按相關分數排序。你想通過LIKE比較會導致醜陋的查詢。 – 2012-03-12 15:40:56

回答

1

有兩種方法可以使用。

一種是使用全文搜索 - 這會帶你進入一個不同但非常有用的方向。請閱讀http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html

另一種方法是,當你做一個文本替換來推斷它使用強度的長度變化:

(LENGTH(`body`) - LENGTH(REPLACE(`body`, 'Adricatic', '')))/LENGTH('Adricatic') 

當然,你會替代「‘Adricatic’」與變量保存搜索的詞你的用戶。你會重複每個領域你想貢獻的分數。總結分數,你就得到了你的結果。