Как отсортировать результаты 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