MySQL:返回一些匹配项

时间:2013-07-02 14:49:09

标签: mysql

我正在构建一个PHP和MySQL的搜索系统,我被要求一些有趣的东西。所以,假设我有一个假设表results(在我的系统中,顺便说一句,这是一个观点)......

id    text
1     "foo"
2     "foo bar"
3     "foo man choo"
4     "bar choo"

...以及一个非常易于理解的SELECT查询:

SELECT r.id, r.text
    FROM results AS r
    WHERE r.text REGEXP 'foo|bar|choo'
    AND r.text NOT REGEXP 'man'

是否有这样的方式,即使它意味着将REGEXP换成LIKE,我可以返回此文本旁边的一个整数列,它返回每行{{1}中的匹配数所以我可以通过相关性/匹配数来命令这个查询,所以结果表看起来像这样?:

text

2 个答案:

答案 0 :(得分:1)

您可以通过将值一起添加来实现:

SELECT r.id, 
       r.text, 
       ((r.text REGEXP 'foo') +
        (r.text REGEXP 'bar') +
        (r.text REGEXP 'choo')
       ) as matches 
FROM results AS r
WHERE r.text REGEXP 'foo|bar|choo'
AND r.text NOT REGEXP 'man'

比较(在MySQL中)评估为0(假)或1,您可以将它们一起添加。

答案 1 :(得分:0)

也许像

SELECT r.id, 
       r.text, 
       r.text REGEXP 'foo' as foo, 
       r.text REGEXP 'bar' as bar,
       r.text REGEXP 'choo' as choo,
       (foo + bar + choo) as number_found 
FROM results AS r
WHERE r.text REGEXP 'foo|bar|choo'
AND r.text NOT REGEXP 'man'

但是,这不会返回给定模式的匹配的数字,只是匹配模式的数量。