【发布时间】:2014-06-02 22:15:34
【问题描述】:
我试着用一个简单的例子来解释我所说的匹配的意思:
我有一张这样的桌子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 短语适用于该行,则一次命中。因此,在这种情况下,我希望命中数为 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 将单个子字符串与返回的名称匹配?
【问题讨论】: