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

Скажем, у нас есть 4 элемента в таблице:

  1. Мишель Джордан
  2. Том Марк Джордан
  3. Иордания Джон
  4. Адам Джордан Роберт

Поисковый запрос « Иордания », как я могу получить результаты отсортированы в алфавитном порядке, но с поисковым термином сначала совпадают:

  1. Jordan John
  2. Michel Jordan
  3. Tom Jordan Robert
  4. Adam Mark Jordan

Я использую этот код, но не получаю то, что хочу:

$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();
10
nl ja de
У меня есть полное имя в одной колонке.
добавлено автор Waleed Asender, источник
Я думаю, вам придется повторно сортировать в PHP после получения результатов. Если у вас есть имя, разбитое на разные поля, вы можете заставить его работать.
добавлено автор swatkins, источник
Правильно, я это понимаю. Поэтому вам нужно получить результаты, а затем повторно отсортировать эти результаты.
добавлено автор swatkins, источник

3 ответы

Попробуй это:

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

Check this link SQL FIDDLE DEMO

<Сильный> OUTPUT

| ID |          FULLNAME |
|----|-------------------|
|  1 |       Jordan John |
|  2 |     Michel Jordan |
|  4 | Tom Jordan Robert |
|  3 |  Adam Mark Jordan |
8
добавлено
Выглядит отлично, но как я могу использовать его в качестве запроса CodeIgniter? И используя переменную $ search_term вместо слова 'Jordan' ??
добавлено автор Waleed Asender, источник
К сожалению, по какой-то причине он не работает для меня !! $ query = $ this-> db-> query ("SELECT name FROM members ORDER BY FIND_IN_SET ('$ keyword", REPLACE (имя,' ',', ')), name ") -> result()
добавлено автор Waleed Asender, источник
@WaleedAsender Я не работал над CodeIgniter, поэтому сожалею об этом, поэтому вы делаете это сами.
добавлено автор Saharsh Shah, источник
вы ищете '$ keyword' , вам нужно убедиться, что подставляемый текст вставлен в запрос: FIND_IN_SET ('". $ keyword."' ... , который должен работать (true с PHP, im не уверен с другими языками)
добавлено автор Steve P, источник

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

$this->db
     ->select('id, fullName')
     ->from('test')
     ->order_by("FIND_IN_SET('Jordan', REPLACE(fullName, ' ', ',')) , fullName");
$query = $this->db->get();
5
добавлено
Он продолжает эту ошибку: произошла ошибка базы данных. Номер ошибки: 1064. У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с '', ', ')) , 'fullName' 'в строке 3
добавлено автор Waleed Asender, источник
Убедитесь, что вы не использовали двойные кавычки между предложением orderby. Также полное имя используется без кавычек
добавлено автор Code Prank, источник

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

$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

0
добавлено
DBA - русскоговорящее сообщество
DBA - русскоговорящее сообщество
1 345 участник(ов)

Общаемся и обсуждаем темы, посвященные DBA, PostgreSQL, Redis, MongoDB, MySQL, neo4j, riak и т.д. См. также: @devops_ru, @kubernetes_ru, @docker_ru, @nodejs_ru Рекомендуем сразу отключить уведомления, чтобы пребывание здесь было полезным и комфортным.

MySQL
MySQL
995 участник(ов)

The group is about MySQL. For code use hastebin.com. Admin: @smlkw

SqlCom.ru - Стиль жизни SQL
SqlCom.ru - Стиль жизни SQL
908 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только MS SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz). Предложения в @sql_ninja

SQL_Ninja
SQL_Ninja
340 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz)