如何按字母顺序对MySQL结果进行排序,但首先使用CodeIgniter ActiveRecord匹配搜索词?

时间:2013-01-09 15:57:13

标签: mysql sorting select sql-order-by

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

  1. Michel Jordan
  2. Tom Mark Jordan
  3. Jordan John
  4. Adam Jordan Robert
  5. 搜索字词为“ Jordan ”,如何按字母顺序排列结果,但搜索字词首先匹配如下:

    1. 约旦约翰
    2. Michel Jordan
    3. Tom Jordan Robert
    4. 亚当马克乔丹
    5. 我正在使用此代码,但没有得到我想要的东西:

      $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();
      

3 个答案:

答案 0 :(得分: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 |

答案 1 :(得分:6)

你可以试试这个:

$this->db
     ->select('id, fullName')
     ->from('test')
     ->order_by("FIND_IN_SET('Jordan', REPLACE(fullName, ' ', ',')) , fullName");
$query = $this->db->get();

答案 2 :(得分: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