php–MySQL:计算每个条目的LIKE匹配数

php–MySQL:计算每个条目的LIKE匹配数,第1张

概述我试着通过一个简单的例子来解释我的意思:我有一个myprods这样的表:id | name 1 galaxy s4 mini 2 samsung galaxy s4 3 galaxy galaxy s3 4 iphone 4s 5 apple iphone 4s 到目前为止我有这个查询:SELECT * FROM mypro

我试着通过一个简单的例子来解释我的意思:

我有一个myprods这样的表:

ID | name1    galaxy s4 mini2    samsung galaxy s43    galaxy galaxy s34    iphone 4s5    apple iphone 4s

到目前为止我有这个查询:

SELECT *FROM   myprodsWHERE  name liKE "%samsung%" OR name liKE "%galaxy%" OR name liKE "%s4%"

我的查询结果是:

ID | name1    galaxy s4 mini2    galaxy s43    galaxy galaxy s3

现在我不仅返回匹配的行,还返回命中数.如果其中一个liKE-phrase适用于该行,那么ONE命中.因此,在这种情况下,我希望命中为0,1,2或3.这意味着:liKE短语“%galaxy%”不应该被计为ID = 3的两次命中,它只算作“命中”或“没有打”.

预期的结果现在是:

ID | name               | hits1    galaxy s4 mini       22    samsung galaxy s4    33    galaxy galaxy s3     1

在高性能的MysqL短语中可能吗?
或者我应该只选择上面带有我的查询的行,然后通过PHP中的strpos将单个子串与返回的名称匹配?

提前致谢

最佳答案在MysqL中,布尔表达式可以用作整数 – 0表示false,1表示true.所以,以下工作:

SELECT p.*,((name liKE '%samsung%') + (name liKE '%galaxy%') + (name liKE '%s4%')) as hitsFROM   myprods pWHERE  name liKE '%samsung%' OR name liKE '%galaxy%' OR name liKE '%s4%';

编辑:

如果是MysqL,您还可以将此查询表达为:

SELECT p.*,((name liKE '%samsung%') + (name liKE '%galaxy%') + (name liKE '%s4%')) as hitsFROM   myprods pHAVING hits > 0;

在此上下文中使用has是sql扩展,在其他数据库中不起作用.但是,它允许查询引用列别名进行过滤,而不使用子查询. 总结

以上是内存溢出为你收集整理的php – MySQL:计算每个条目的LIKE匹配数全部内容,希望文章能够帮你解决php – MySQL:计算每个条目的LIKE匹配数所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1167430.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存