php - 如何在分解字符串中按名字 (SQL) 排序

标签 php mysql sql

我有以下代码来在具有所有三个名称的字段中搜索名称,因此我被迫分解字符串以获得更好的结果,如下所示

$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 结果。 可以这么说,我希望列出所有“Gabriels”,但我的结果按在搜索框中输入的名字排序。如果名字和名字位于单独的列中,这会更容易。

怎样才能达到预期的效果?

最佳答案

试试这个

   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

关于php - 如何在分解字符串中按名字 (SQL) 排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22509676/

相关文章:

php - 是否可以全局记录所有 Guzzle 请求?

php - Laravel 搜索多个 `where`

php - 插入错误sql语法

php - 如何选择所有表格的行?

mysql - 设计与三个实体的关系,其中两个实体没有关系

php - 从购物车页面中删除 Woocommerce 购物车数量选择器

php - 如何使用 php 将数据库 mysql 中的 É,â,... 转换为普通字符串 é,â,...?

mysql - 从选择插入失败并出现奇怪的错误

c# - SQL SERVER 2005 返回值

PHP对子类的神奇方法__call