MYSql ORDER BY CASE 1-й случай должен упорядочить по массиву идентификаторов

У меня есть запрос Mysql SELECT, который используется в функции поиска, я хочу проверить массив идентификаторов, если они совпадают с идентификатором в БД.

Мой клиент хочет, чтобы он был заказан особым образом, поэтому мне придется использовать ORDER BY CASE, но я не могу понять, как мне скомбинировать это с массивом идентификаторов. Я попытался использовать функцию FIELD, но, похоже, она не работает в сочетании с ORDER BY CASE.

У кого-нибудь есть предложения?

Мой заказ пока:

   ORDER BY
CASE
WHEN FIELD(p.ID, $implodedArray) THEN '0'
WHEN p.post_title LIKE '%$keyword%' THEN '1'
WHEN pm.meta_value LIKE '%$keyword%' THEN '2'
WHEN p.post_content LIKE '%$keyword%' THEN '3' ELSE '4' END,

2

Решение

Ты можешь использовать FIND_IN_SET ()

ORDER BY
CASE
WHEN FIND_IN_SET(p.ID, $implodedArray) THEN 0
WHEN p.post_title LIKE '%$keyword%' THEN 1
WHEN pm.meta_value LIKE '%$keyword%' THEN 2
WHEN p.post_content LIKE '%$keyword%' THEN 3
ELSE 4
END

Это предполагает, что вы взорвали свой массив так

implode(',', $some_array);

причина в том, что find_in_set использует разделенную запятыми строку ака .. '1,2,3,4,5'

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector