Как отсортировать результаты MySQL в алфавитном порядке, но с поисковым термином сначала использовать CodeIgniter ActiveRecord?

Скажем, у нас есть 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();

Ответ 1

Попробуйте следующее:

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

Отметьте эту ссылку SQL FIDDLE DEMO

OUTPUT

| ID |          FULLNAME |
|----|-------------------|
|  1 |       Jordan John |
|  2 |     Michel Jordan |
|  4 | Tom Jordan Robert |
|  3 |  Adam Mark Jordan |

Ответ 2

Вы можете попробовать следующее:

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

Ответ 3

Моя попытка для вас:

$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