如何在爆炸字符串中按名字(SQL)排序


How to order by first name (SQL) in an exploded string

我有以下代码在一个字段中搜索一个名称,该字段包含所有三个名称,因此我被迫将字符串爆炸以获得更好的结果,如下所示

$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 ";

问题是,一旦搜索查询,如劳伦斯加布里埃尔和我的数据库确实有劳伦斯加布里埃尔,但也爱德华加布里埃尔,我将得到劳伦斯之前列出的爱德华结果。我想把所有的"加布里埃尔"都列出来,但我的搜索结果是按输入搜索框的名字排序的。

如果名字和第二个名字分别放在单独的列中,这就容易多了。

我怎样才能达到我想要的结果?

try this

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

这将按

空格前的名字排序。

你也可以这样用:

 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