当可能存在完全匹配时,对 MySQL table 执行部分搜索

Perform partial search on MySQL table when exact match may be available

我是 运行 来自 PHP 脚本的以下 SQL 语句:

SELECT PHONE, COALESCE(PREFERREDNAME, POPULARNAME) FROM distilled_contacts WHERE PHONE LIKE :phone LIMIT 6

很明显,语句 return 的前 6 个与所讨论的 table 相匹配。我绑定到 :phone 变量的值是这样的:

$search = '%'.$search.'%';

其中,$search可以是任意一串数字。通配符确保搜索 918 时 return 每个 PHONE 字段包含 918:

的记录
  1. 9180078961
  2. 9879189872
  3. 0098976918
  4. 918
  5. ...

我的问题是,如果确实存在一个条目,其值与搜索字符串完全匹配,在本例中为 918(上面列表中的第 4 项)。由于存在 LIMIT 6,因此只会检索前 6 个条目,这些条目可能包含也可能不包含完全匹配的条目。有没有办法确保结果始终包含完全匹配的记录,在结果列表的顶部,应该有一个可用吗?

您可以使用 order by 来确保完全匹配总是在最前面:

ORDER BY CASE WHEN PHONE = :phone THEN 1 ELSE 2 END  

使用$search = ''.$search.'%'将显示与起始值匹配的结果。