如果列具有特定值,则按列排序SQL

时间:2016-02-20 12:59:24

标签: mysql sql join case

我有两张桌子,连在一起。

第一桌

activity: id, name, date_created

第二桌

activity_meta: id, activity_id, meta_key, meta_value

我想以这种方式对结果进行排序:

FIRST:具有activity_meta.meta_key = sticky和activity_meta.meta_value = 1的条目,由activity.date_created DESC排序

NEXT:所有其他条目有/或没有activity_meta.meta_key = sticky但activity_meta.meta_value不是1,由activity.date_created DESC命令

这是一个开始:

SELECT DISTINCT a.id
FROM activity AS a INNER JOIN
     activity_meta AS ameta
     ON a.id = ameta.activity_id
 WHERE ameta.meta_key = 'sticky'
 ORDER BY ameta.meta_key DESC, a.date_created DESC

如上所述,但我不知道如何设置这些案例。

非常感谢!!!

1 个答案:

答案 0 :(得分:2)

如果您只想要id,那么我希望看到group by。然后,条件聚合为您提供排序所需的内容:

SELECT a.id
FROM activity a INNER JOIN
     activity_meta ameta
     ON a.id = ameta.activity_id
GROUP BY a.id
ORDER BY MAX(ameta.meta_key = 'sticky' and ameta.meta_value = '1') DESC, 
         a.date_created DESC;

这使用MySQL特性,将布尔表达式视为整数。因此,真正的价值被视为" 1"并且假值为" 0"。