【问题标题】:MySQL sort by column and column valueMySQL按列和列值排序
【发布时间】:2013-12-24 14:46:35
【问题描述】:

我这里有一个情况,我有两个表的连接来获取记录,其中一个表将键值对存储在两个不同的列中(wordpress 用户元表)。

这是我的查询:

SELECT 
    um.user_id
FROM
    sl_job_applications as ja,
    sl_usermeta as um
WHERE
    um.user_id = ja.user_id
        AND ja.job_id = 3
        AND ja.STAGE = 'Application'
        AND ja.STATUS = 'In progress'
group by ja.user_id
order by case when (um.meta_key = 'CURRENT_TOTAL_EXPERIENCE') then -1 else 2 end,
         um.meta_value asc
LIMIT 0 , 50;

order by 在这里不起作用,我的数据是

user_id             meta_key                       meta_value

3                   CURRENT_TOTAL_EXPERIENCE       6

4                   CURRENT_TOTAL_EXPERIENCE       2

5                   CURRENT_TOTAL_EXPERIENCE       1

6 

希望你能看懂我的表格数据,

我上面的查询返回 6,4,5,3

但我期待这个输出: 6,5,4,3

【问题讨论】:

    标签: mysql sql select sql-order-by multiple-columns


    【解决方案1】:

    只需将order by更改为具有max()等聚合函数和值:

    order by min(case when (um.meta_key = 'CURRENT_TOTAL_EXPERIENCE') then -1 else 2 end),
             min(case when (um.meta_key = 'CURRENT_TOTAL_EXPERIENCE') then um.meta_value end) asc
    LIMIT 0 , 50;
    

    第一个检查具有该值的元键是否存在。第二个提取值并进行排序。

    【讨论】:

    • 嘿,这是有效的,但只是为了了解如果我每次都想要空白值,那我该怎么办?
    • @ntechi 。 . .更改为 min() 应该可以解决这个问题。
    • 嘿,谢谢伙计,那真是太棒了,谢谢,圣诞快乐
    【解决方案2】:

    试试这个:

    SELECT um.user_id
    FROM sl_job_applications AS ja
    INNER JOIN sl_usermeta AS um ON um.user_id = ja.user_id
    WHERE ja.job_id = 3 AND ja.STAGE = 'Application' AND ja.STATUS = 'In progress'
    GROUP BY ja.user_id
    ORDER BY CASE WHEN (um.meta_key = 'CURRENT_TOTAL_EXPERIENCE') THEN -1 ELSE 2 END,
             CAST(um.meta_value AS SIGNED) ASC
    LIMIT 0, 50
    

    【讨论】:

      猜你喜欢
      • 2014-07-24
      • 1970-01-01
      • 2017-01-06
      • 1970-01-01
      • 2016-07-19
      • 1970-01-01
      • 2018-03-12
      • 2012-12-15
      • 2012-10-19
      相关资源
      最近更新 更多