我需要在页面上显示从数据库中获取的事件列表。我的查询的特殊性依赖于同一个表中有不同类型的事件,然后是不同的选择条件/过滤器。
事件表格(简化)架构:
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,但我想知道是否有更简单的解决方案。谢谢!
答案 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的语法可能略有不同。