我遇到了编码问题,想知道是否存在以下情况的SQL实现:
我想在文本列中搜索某些单词,并希望根据找到的单个单词的数量对结果进行排序。例如:
让我们找到包含以下内容的行:a b s
a b b c d e s
b d s w d a s
x d s g w d s
f e h w d s a
所需的结果将是:
a b b c d e s (it contains all 3 words)
b d s w d a s (it contains all 3 words)
f e h w d s a (it contains 2 words)
x d s g w d s (it contains 1 word)
是否建议您在例如PHP还是有一种有效的SQL方法?
答案 0 :(得分:1)
您可以使用布尔表达式来做到这一点:
select t.*,
( (col like '%a%') +
(col like '%b%') +
(col like '%s%') +
) as num_matches
from t
order by num_matches desc;
如果单词之间用空格隔开,则:
select t.*,
( (concat(' ', col, ' ') like '% a %') +
(concat(' ', col, ' ') like '% b %') +
(concat(' ', col, ' ') like '% s %') +
) as num_matches
from t
order by num_matches desc;
最后,如果您遇到这种类型的问题,则应该执行以下两项操作之一:
答案 1 :(得分:0)
如果在SQL中完成操作,我会考虑使用允许RANK({http://msdn.microsoft.com/en-us/library/cc879245.aspx)
的全文搜索完成操作答案 2 :(得分:0)
我的想法: