我正在构建一个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
答案 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'
但是,这不会返回给定模式的匹配的数字,只是匹配模式的数量。