1

我有 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

4

2 回答 2

3

使用联合查询它。

SELECT TheDate,
       TheText
  FROM Table_A
 WHERE [your critera]
 UNION
SELECT TheDate,
       TheText
  FROM Table_B
 WHERE [your critera]
...

如果您只需要选择不同的,则可以将其包装如下:

Select Distinct
       TheDate,
       TheText
  From 
(
 SELECT TheDate,
       TheText
  FROM Table_A
 WHERE [your critera]
 UNION
SELECT TheDate,
       TheText
  FROM Table_B
 WHERE [your critera]
...
);
于 2012-04-28T03:06:44.637 回答
1

听起来您已经有了选择和连接,只是缺少分页。如果是这种情况,您的脚本将必须跟踪您所在的页面,并且每次单击“下一页”都必须通过将其附加到您的 SELECT 查询来告诉 MySQL 从何处返回下一个 10 条记录:

选择...加入...在哪里...排序...限制 20、10

将返回从完整记录集中第 21 行开始的接下来的 10 行

于 2012-04-28T02:47:58.877 回答