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

SQL sort by column if column has a certain value

我有两个 table 连在一起。

第一table

activity: id, name, date_created

第 2 table

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:have/or 没有 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

类似上面的内容,但我不知道如何设置这些案例。

万分感谢!!!

如果您只想要 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”。