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”。
我有两个 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”。