MYSql ORDER BY CASE 1st CASE应该按ID数组排序

时间:2015-11-03 18:31:11

标签: php mysql arrays sql-order-by case

我有一个在搜索功能中使用的Mysql SELECT查询,我想检查一组id,如果它们与db中的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,

1 个答案:

答案 0 :(得分: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使用逗号分隔的字符串aka .. '1,2,3,4,5'