我有下面的代码在一个包含三个名称的字段中搜索一个名称,因此我不得不将字符串分解以获得更好的结果,如下所示

$search_terms = explode(" ", $key);
$count = count($search_terms);
$tick= 0;
$query = "";
for($i = 0; $i < $count; $i++) {
    $tick++;
    $query .= "SELECT * ";
    $query .= "FROM agents ";
    $query .= "WHERE names ";
    $query .= "LIKE '%".$search_terms[$i]."%' ";
    $query .= "OR company LIKE '%".$search_terms[$i]."%' ";
    if($tick != $count)
    $query .= " UNION ";
}
    $query .="ORDER BY names ASC ";

问题是,一旦像Lawrence Gabriel和我的数据库这样的搜索查询确实有Lawrence Gabriel,但也有Edward Gabriel,我就会得到在Lawrence之前列出的Edward结果。
我想列出所有的“加布里埃尔”,可以这么说,但我的搜索结果要按输入到搜索框中的名字排序。如果第一个名称、第二个名称在单独的列中,这会更容易。
我怎样才能达到预期的效果?

最佳答案

试试这个

   ORDER BY SUBSTRING_INDEX(names, ' ', 1) ASC

这将按空格前的名字排序
Demo
你也可以这样使用它:
 SELECT id, names,  SUBSTRING_INDEX(names, ' ', 1) name
 FROM agents
 WHERE names
 LIKE '%".$search_terms[$i]."%'
 OR company LIKE '%".$search_terms[$i]."%'
 ORDER BY name asc

DEMO

10-08 04:42