【问题标题】:mysql query to count how many times the like operator matches every columnmysql查询计算like运算符匹配每列的次数
【发布时间】:2015-09-22 19:08:39
【问题描述】:
$sql ="SELECT * 
       FROM members m 
       INNER JOIN author_details a 
          on m.email= a.email 
       where m.name like '".$search_text."%' 
          or a.username like '".$search_text."%' 
          or a.address_line1 like '%".$search_text."%' 
          or a.address_line2 like '%".$search_text."%' 
          or a.city like '%".$search_text."%' 
          or m.phone = ".(int)$search_text."

所以我正在寻找的是计算哪一列的匹配度最高,然后首先返回该结果集,例如,如果在地址列中找到关键字最匹配,那么结果集现在应该首先包含地址匹配的结果,结果是即使他们很少,也会首先显示名称。

我对 sql 不太了解,所以请尽量保持简单

【问题讨论】:

  • 尝试包含一些数据样本和期望的输出。

标签: mysql sql


【解决方案1】:

比较运算符在匹配时返回1,因此您可以使用SUM() 将它们相加。

$sql ="SELECT
            SUM(m.name like '".$search_text."%') AS name_matches,
            SUM(a.username like '".$search_text."%') AS username_matches,
            SUM(a.address_line1 like '%".$search_text."%') AS addr1_matches,
            SUM(a.address_line2 like '%".$search_text."%') AS addr2_matches,
            SUM(a.city like '%".$search_text."%') AS city_matches,
            SUM(m.phone = ".(int)$search_text.") AS phone_matches
       FROM members m 
       INNER JOIN author_details a 
          on m.email= a.email";

_matches 中的每一列都将包含搜索文本在该列中匹配的行数。

【讨论】:

  • 我认为你的回答很好,但 OP 也想要某种排序。但这部分并不容易做到。
  • 我不太确定他的意思,我希望这个答案能让他开始完整的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多