這是一個挑戰。暴力方法是在一個帶有計數的子查詢中使用UNION。
例如,
select id, file, count(*) from
(select distinct id, file
from file_table
where FIND_IN_SET(keyword1, keywords)
UNION ALL
select distinct id, file
from file_table
where FIND_IN_SET(keyword2, keywords)
UNION ALL
select distinct id, file
from file_table
where FIND_IN_SET(keyword3, keywords)
UNION ALL
select distinct id, file
from file_table
where FIND_IN_SET(keyword4, keywords)
.... MORE UNION ALL ....) as files
group by id, file
having count(*) >= 3
更有效,你可以有關鍵字和ID,一個關鍵字/每行ID組合一個單獨的表。這將消除通配符搜索並使查詢更有效。
接下來的步驟是去ElasticSearch之類的東西,並過濾結果的分數。
那麼什麼是你的其他的表結構看起來就像你正在尋找對抗......或者是這樣的吧,你只是用一個字符串來比較。如果是這樣,關鍵字上下文設計不佳。 – DRapp 2012-02-04 17:11:30
還沒有其他表。我必須在現場搜索:關鍵字。 – Svetoslav 2012-02-04 17:14:53
@Svetlio:表格結構是您的選擇嗎?你是如何使用逗號分隔值列來的?如果你看過這將是良好[規範化](http://en.wikipedia.org/wiki/Database_normalization),並在關係表中存儲逗號分隔值的問題:是存儲一個逗號數據庫中的列分隔列表真那壞?](http://stackoverflow.com/questions/3653462/is-storing-a-comma-separated-list-in-a-database-column-really-that-bad) – 2012-02-04 17:34:11