如何使用mysql缩小搜索结果范围

如何使用mysql缩小搜索结果范围,mysql,Mysql,我正在运行大型搜索查询,例如: WHERE 'gender' LIKE '%a%' OR fname LIKE '%a%' OR mname LIKE '%a%' OR lname LIKE '%a%' OR address LIKE '%a%' OR card LIKE '%a%' OR email LIKE '%a%' OR fname LIKE '%ryan%' OR mname LIKE '%ryan%' OR lname LIKE '%ryan%' OR addr

我正在运行大型搜索查询,例如:

WHERE
 'gender' LIKE '%a%'
 OR fname LIKE '%a%'
 OR mname LIKE '%a%'
 OR lname LIKE '%a%'
 OR address LIKE '%a%'
 OR card LIKE '%a%'
 OR email LIKE '%a%'
 OR fname LIKE '%ryan%'
 OR mname LIKE '%ryan%'
 OR lname LIKE '%ryan%'
 OR address LIKE '%ryan%'
 OR card LIKE '%ryan%'
 OR email LIKE '%ryan%'`
它根据您在搜索框中的位置搜索所有这些内容

mysql将为我提供以下行:


这是我的问题。我只想得到最准确的结果,因为这个。在本例中,这将是第一个结果,因为名字是Ryan,在名字和中间名中包含字母a。有人能帮我吗?

效率不高,但你可以试试:

ORDER BY
  (gender LIKE '%a%') +
  (fname LIKE '%a%') +
  (mname LIKE '%a%') +
  (lname LIKE '%a%') +
  (address LIKE '%a%') +
  (card LIKE '%a%') +
  (email LIKE '%a%') +
  (fname LIKE '%ryan%') +
  (mname LIKE '%ryan%') +
  (lname LIKE '%ryan%') +
  (address LIKE '%ryan%') +
  (card LIKE '%ryan%') +
  (email LIKE '%ryan%'`) DESC
LIMIT 1

然而,我会在上调查。

为什么你不能检查一下
fname='Ryan'
?为什么Ryan?你想如何排序结果?因为这是一个搜索框,人们用它来查找各种各样的东西。我想按最亲的顺序订购。因此,如果我输入“ant ryan”,它会给我“ryan Anthony”,因为名字和中间名都至少包含一个条目。修复了一个拼写错误,您在性别之后有一个
,这是一个不错的解决方案,但OP必须按照您的建议使用全文,否则服务器将着火:)。
ORDER BY
  (gender LIKE '%a%') +
  (fname LIKE '%a%') +
  (mname LIKE '%a%') +
  (lname LIKE '%a%') +
  (address LIKE '%a%') +
  (card LIKE '%a%') +
  (email LIKE '%a%') +
  (fname LIKE '%ryan%') +
  (mname LIKE '%ryan%') +
  (lname LIKE '%ryan%') +
  (address LIKE '%ryan%') +
  (card LIKE '%ryan%') +
  (email LIKE '%ryan%'`) DESC
LIMIT 1