我有8个单独的表。每个表都有id,datetime字段和一些文本。
我在时间线视图中呈现单个页面上所有表格的组合数据,最近的条目位于顶部,每个表格中的条目在此时间线中混合。
现在困难的部分 - 我需要为这个网站添加分页,所以在每个页面上我想要显示10天(除了最后一页,可能少于10个)。 每个表可能有不同的行数。
我一直在努力解决这个问题很长一段时间,但还没有找到一个优雅的解决方案。
这是一个例子(我将为这个例子选择两个表来简化它)。
4月1日| A1
4月5日| A2
4月7日| A3
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
问题是 - 我无法找到一种以优雅的方式查询此数据的方法。这是我一直在搞乱的一些实时查询:
选择日期(d.entryTime)entryDate,date(wc.changeTime)wcDate 来自diary_entry d 加入water_change wc 在d.aquariumId = wc.aquariumId 其中d.aquariumId = 2 按entryDate分组 按entryDate排序 限制10,5
所以,对于一个表我有这个查询: 选择日期(d.entryTime)entryDate 来自diary_entry d 其中d.aquariumId = 2 按entryDate分组
它产生13个结果
entryDate
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
和另一个: 选择日期(wc.changeTime)changeDate 来自water_change wc 其中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行
找到解决方案! (选择日期(d.entryTime)activityDate 来自diary_entry d 其中d.aquariumId = 1 按活动分组日期) 联盟 (选择日期(wc.changeTime)activityDate 来自water_change wc 其中wc.aquariumId = 1 按活动分组 按活动订购日期) 限制10,10
答案 0 :(得分:1)
听起来你有选择和加入到位,只是错过了分页。如果是这种情况,您的脚本将必须跟踪您所在的页面,并且每次单击“下一页”都必须通过将此附加到您的SELECT查询来告诉MySQL从哪里返回接下来的10条记录:< / p>
SELECT ... JOIN ... WHERE ... ORDER BY ... LIMIT 20,10
将从完整记录集
中的第21行开始返回接下来的10行答案 1 :(得分:1)
使用联盟查询。
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]
...
);