我有 8 张单独的桌子。每个表都有 id、一个日期时间字段和一些文本。
我在时间线视图的单个页面上呈现来自所有表的组合数据,最近的条目位于顶部,每个表中的条目在此时间轴中混合。
现在最困难的部分 - 我需要在这个网站上添加分页,所以在每个页面上我想准确显示 10 天(除了最后一页,可能少于 10 天)。每个表可能有可变数量的行。
我已经为此苦苦挣扎了很长一段时间,但还没有想出一个优雅的解决方案。
这是一个示例(我将为此示例仅选择两个表以使其更简单)。
表A
4 月 1 日 | a1
4 月 5 日 | a2
4 月 7 日 | a3
表B
4 月 2 日 | b1
4 月 2 日 | b2
4 月 5 日 | b3
4 月 6 日 | b4
全球时间表看起来像这样
4 月 7 日 a3
4 月 6 日 b4
4 月 5 日 a2
4 月 5 日 b3
4 月 2 日 b2
4 月 2 日 b1
4 月 1 日 a1
如果每个页面只显示 3 天,我需要它看起来像这样:
--- p1 ---
4 月 7 日 a3
4 月 6 日 b4
4 月 5 日 a2
--- p2 ---
4 月 5 日 b3
4 月 2 日 b2
4 月 2 日 b1
--- p3 ---
4 月 1 日 a1
问题是 - 我想不出一种优雅的方式来查询这些数据。这是我一直在搞乱的一些实时查询:
select date(d.entryTime) entryDate, date(wc.changeTime) wcDate from diary_entry d join water_change wc on d.aquariumId = wc.aquariumId where d.aquariumId = 2 group by entryDate order by entryDate limit 10, 5
所以,对于一个表,我有这个查询: select date(d.entryTime) entryDate from diary_entry d where d.aquariumId = 2 group by entryDate
它产生 13 个结果条目日期 2012-01-13
2012-01-14
2012-01-25
2012-01-26
2012-01-31
2012-02-04
2012-02-17
2012-02-20
2012-02-25
2012-03-17
2012-03-31
2012-04-01
2012-04-06
另一个: select date(wc.changeTime) changeDate from water_change wc where wc.aquariumId = 2 group by changeTime
它产生 8 个结果 2012-01-22
2012-01-26
2012-02-17
2012-02-25
2012-03-04
2012-03-10
2012-04-04
2012-04-24
两者之间共有三天 2012-01-26 2012-02-17 2012-02-25
所以我需要生成的查询必须有 13 + 8 - 3 行 = 18 行
并找到了解决方案!(select date(d.entryTime) activityDate from diary_entry d where d.aquariumId = 1 group by activityDate) union (select date(wc.changeTime) activityDate from water_change wc where wc.aquariumId = 1 group by activityDate order by activityDate) 限制 10 , 10