MYSql ORDER BY CASE 第一种情况应按 ID 数组排序
MYSql ORDER BY CASE 1st CASE should order by array of IDs
我有一个用于搜索功能的 Mysql SELECT 查询,我想检查一个 ID 数组是否与数据库中的 ID 匹配。
我的客户希望它以特定方式排序,所以我必须使用 ORDER BY CASE,但我似乎无法弄清楚如何将它与 ID 数组结合起来。我尝试使用 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'
我有一个用于搜索功能的 Mysql SELECT 查询,我想检查一个 ID 数组是否与数据库中的 ID 匹配。
我的客户希望它以特定方式排序,所以我必须使用 ORDER BY CASE,但我似乎无法弄清楚如何将它与 ID 数组结合起来。我尝试使用 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'