我试着通过一个简单的例子来解释我的意思:
我有一个myprods这样的表:
id | name
1 galaxy s4 mini
2 samsung galaxy s4
3 galaxy galaxy s3
4 iphone 4s
5 apple iphone 4s
到目前为止我有这个查询:
SELECT *
FROM myprods
WHERE name LIKE "%samsung%" OR name LIKE "%galaxy%" OR name LIKE "%s4%"
我的查询结果是:
id | name
1 galaxy s4 mini
2 galaxy s4
3 galaxy galaxy s3
现在我不仅返回匹配的行,还返回命中数.如果其中一个LIKE-phrase适用于该行,那么ONE命中.因此,在这种情况下,我希望命中为0,1,2或3.这意味着:LIKE短语“%galaxy%”不应该被计为id = 3的两次命中,它只算作“命中”或“没有打”.
预期的结果现在是:
id | name | hits
1 galaxy s4 mini 2
2 samsung galaxy s4 3
3 galaxy galaxy s3 1
在高性能的MysqL短语中可能吗?
或者我应该只选择上面带有我的查询的行,然后通过PHP中的strpos将单个子串与返回的名称匹配?
提前致谢
最佳答案
在MysqL中,布尔表达式可以用作整数 – 0表示false,1表示true.所以,以下工作:
原文链接:/mysql/433479.htmlSELECT p.*,((name LIKE '%samsung%') + (name LIKE '%galaxy%') + (name LIKE '%s4%')) as hits
FROM myprods p
WHERE name LIKE '%samsung%' OR name LIKE '%galaxy%' OR name LIKE '%s4%';
编辑:
SELECT p.*,((name LIKE '%samsung%') + (name LIKE '%galaxy%') + (name LIKE '%s4%')) as hits
FROM myprods p
HAVING hits > 0;