我有两张桌子,连在一起。
第一桌
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
如上所述,但我不知道如何设置这些案例。
非常感谢!!!
答案 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"。