У меня есть запрос 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,
Ты можешь использовать 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'
Других решений пока нет …