2010-08-26 72 views
0

我有一個MySQL數據庫表,其中包含空格分隔值的「word」列。例如:MySql:按空格分隔值列中的匹配數排序結果

one two three four five 

所以上面給出的紀錄,我想找到包含一個或多個這些空格分隔值的其他記錄,並責令由數量最多的有關比賽的結果。我該如何去實現這個目標?

例如:

one two six seven eight 
three nine ten eight seven 
one two three six seven 
one two three four ten 
six seven eight nine ten 

我想下面返回:

one two three four ten --4 matching values 
one two three six seven --3 matching values 
one two six seven eight --2 matching values 
three nine ten eight seven --1 matching value 

這是我使用至今查詢:

SELECT * from MyTable WHERE words like '%one%' OR words like '%two%' OR words like '%three%' OR words like '%four%' OR words like '%five%' 

但是,只有選擇共享一個或多個單詞的結果。我怎樣才能跟蹤有多少匹配,並根據這個結果排序結果?

回答

0

您可能會看看執行全文搜索,如the type described here

雖然另一個非常混亂的方法是使用類似的語句,然後用正則表達式解析結果集以獲得每個記錄匹配的數量,因此允許您基於數字或匹配實現排名。

享受!

+0

感謝您的回覆,但那不是我要找的。 – Jones 2010-08-26 18:20:26

+0

@Jones:爲什麼不呢? – 2010-08-26 18:21:47

+0

是的好問題 - 你想建立自己的全文搜索引擎嗎? – Doug 2010-08-26 18:32:38

0

我覺得沒有簡單和優雅的方式如何實現這一點。我的解決方案是這樣的:

SELECT MyTable.* FROM MyTable JOIN 
(SELECT row_id, COUNT(*) AS count 
    FROM 
     (
     SELECT row_id from MyTable WHERE words like '%one%' 
     UNION 
     SELECT row_id from MyTable WHERE words like '%two%' 
     ) 
    GROUP BY row_id 
) AS count_result 
ON MyTable.row_id=count_result.row_id 
ORDER BY count_result.count DESC