私は8つの別々のテーブルを持っています。各テーブルには、ID、日時フィールド、およびいくつかのテキストがあります。
タイムラインビューの単一ページにすべてのテーブルから結合されたデータを表示しています。最新のエントリが一番上にあり、各テーブルのエントリがこのタイムラインに混在しています。
ここで難しい部分です。このWebサイトにページ付けを追加する必要があるため、各ページに正確に10日を表示します(最後のページを除いて、10日未満の場合があります)。各テーブルには、可変数の行が含まれる場合があります。
私はかなり長い間これに苦労してきましたが、まだエレガントな解決策を思い付いていません。
これが例です(この例では、簡単にするために2つのテーブルのみを選択します)。
tableA
4月1日| a14
月5日| a24
月7日| a3
tableB
4月2日| b
14月2日| b24
月5日| b34
月6日| b4
グローバルタイムラインは次のようになります
4月7日a34
月6日b44月5日a24
月5
日b 34
月2日b24月2
日b
14月1日a1
また、各ページに3日しか表示されない場合は、次のようにする必要があります。
--- p1---
4月7日a34
月6日b44
月5日a2
--- p2---
4月5日b34
月2日b24
月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
したがって、1つのテーブルに対して、次のクエリがあります。select date(d.entryTime)entryDate from diary_entry d where d.aquariumId = 2 group by entryDate
13件の結果が得られますエントリ
日付
2012-01-132012-01-142012-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
もう1つは、date(wc.changeTime)changeDate from water_change wc where wc.aquariumId = 2 groupbychangeTimeを選択します。
8つの結果が得られ
ます
2012-01-222012-01-262012-02-17
2012-02-25
2012-03-04
2012-03-10
2012-04-04
2012-04-24
2つの間に3つの一般的な日があります2012-01-262012-02-172012-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)limit 10 、10