当完全匹配可用时,在MySQL表上执行部分搜索

时间:2015-06-02 21:59:13

标签: php mysql select match

我从PHP脚本运行以下SQL语句:

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

很明显,该语句返回前面有关该表的前6个匹配项。我与:phone变量绑定的值是这样的:

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

其中,$search可以是任何数字串。通配符确保搜索918,将返回PHONE字段包含918的每条记录:

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

2 个答案:

答案 0 :(得分:1)

您可以使用订单来确保完全匹配始终位于最前面:

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

答案 1 :(得分:0)

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