【问题标题】:SQL sort by column if column has a certain value如果列具有特定值,SQL 按列排序
【发布时间】:2016-02-20 12:59:23
【问题描述】:

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

第一张桌子

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

类似上面的东西,但我不知道如何设置这些情况。

非常感谢!!!

【问题讨论】:

  • 请编辑您的问题并显示示例数据和期望的结果。

标签: mysql sql join case


【解决方案1】:

如果您只想要ids,那么我希望看到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”。

【讨论】:

  • 今天,先生,您是神。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-13
  • 1970-01-01
  • 1970-01-01
  • 2014-06-17
  • 1970-01-01
  • 2011-07-26
  • 1970-01-01
相关资源
最近更新 更多