MYSQL查询:最后N行+所有具有特定标志集的行

时间:2016-05-25 13:56:56

标签: mysql

我需要在页面上显示从数据库中获取的事件列表。我的查询的特殊性依赖于同一个表中有不同类型的事件,然后是不同的选择条件/过滤器。

事件表格(简化)架构:

Id INT UNSIGNED AI PK
Type TINYINT
Important BOOL
DateStart DATE
DateStop DATE

我的主页上有两种类型的事件:

  • 新闻:我只想要last 10 rows(按日期排序)where [Type=1],(DateStart和DateStop始终相同)。
  • 操作:每行where [Type=2] and [Show = true] and [DateStart >= NOW] and [DateStop <= NOW],结果不得计入新闻&#39; 10行限制。

所有这些(最后10个新闻+显示的动作)都按DateStop ASC排序。

是否可以在单个查询中执行此操作?我想过UNION,但我想知道是否有更简单的解决方案。谢谢!

1 个答案:

答案 0 :(得分:1)

为什么不结合?

select tmp.type, tmp.important,tmp.datestart,tmp.datestop 
from                                           -- the 10 last news:
(select top 10 type, important,datestart,datestop
from yourtable
where type=1
order by id desc
union
select type, important,datestart,datestop
from yourtable
where type <>1) tmp   -- in this where clause, add all the other conditions!
order by datestart asc -- or whichever date you want to order by

你可能需要稍微编辑一下,因为我习惯使用microsoft的sql server,因此mysql的语法可能略有不同。