php - MYSql ORDER BY CASE 第一个 CASE 应按 ID 数组排序

标签 php mysql arrays sql-order-by case

我有一个在搜索函数中使用的 Mysql SELECT 查询,我想检查 ids 数组是否与数据库中的 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'

关于php - MYSql ORDER BY CASE 第一个 CASE 应按 ID 数组排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33506500/

相关文章:

java - 需要将输入取到数组,直到用户输入 0 JAVA

mysql - 在 ORDER BY 子句和聚合函数别名中使用聚合函数是否存在与性能相关的差异?

PHP MySQL 使用 array() 打印每月数据不起作用

PHP preg_replace 使正则表达式可选?

php - php 数组中的引号到 javascript 数组

php - 添加在 ajax 搜索字段 wordpress 中搜索类别名称的功能

php - jquery ajax 即使发生更新也总是出错

java - 我怎样才能在java中迭代这两个循环?

C# - 来自字节数组的 BigInteger 与来自 UInt64 的 BigInteger 产生不同的结果

php - 无法读取环境变量