10

假设我们在一个表中有 4 个项目:

  1. 米歇尔乔丹
  2. 汤姆马克乔丹
  3. 乔丹·约翰
  4. 亚当·乔丹·罗伯特

搜索词是“乔丹”,我怎样才能得到按字母顺序排序但搜索词首先匹配的结果,如下所示:

  1. 乔丹·约翰
  2. 米歇尔乔丹_
  3. 汤姆乔丹罗伯特
  4. 亚当马克乔丹

我使用这段代码,但没有得到我想要的:

$this->db->select('id, name');
$this->db->from('users');
$this->db->like('name', $search_term);
$this->db->order_by('name', 'asc');
$query = $this->db->get();
4

3 回答 3

10

试试这个:

SELECT id, fullName 
FROM test 
ORDER BY FIND_IN_SET('Jordan', REPLACE(fullName, ' ', ',')), fullName;

检查此链接SQL FIDDLE DEMO

输出

| ID |          FULLNAME |
|----|-------------------|
|  1 |       Jordan John |
|  2 |     Michel Jordan |
|  4 | Tom Jordan Robert |
|  3 |  Adam Mark Jordan |
于 2013-01-10T05:47:15.947 回答
6

你可以试试这个:

$this->db
     ->select('id, fullName')
     ->from('test')
     ->order_by("FIND_IN_SET('Jordan', REPLACE(fullName, ' ', ',')) , fullName");
$query = $this->db->get();
于 2013-02-07T07:22:45.097 回答
0

我对你的尝试:

$this->db->select('id, name, (SELECT name FROM users WHERE name REGEXP "^'.$search_term.'") as "regexp_match"');
$this->db->from('users');
$this->db->like('name', $search_term);
$this->db->order_by('name', 'asc');
$this->db->order_by("regexp_match", "asc");
$query = $this->db->get();

我知道这看起来有点奇怪,但相信我,你想使用 REGEXP。:D

于 2013-02-12T07:09:00.127 回答