我有三个数据表:
table: cars [10,000 rows]
table: planes [2,000 rows]
table: trains [50 rows]
我希望能够向用户展示从三个表中获取的数据页面,例如:
car
plane
train
car
plane
train
...
关键是他们可以继续分页,查看每种类型的一种,直到每个表都用完为止。例如,在某些时候,每个页面将只包含汽车,因为飞机和火车表将在汽车表之前用完。
是否可以运行查询以从每个表中获取一行,直到达到限制?就像是:
SELECT * FROM cars, planes, trains ORDER BY (natural row ordering?) LIMIT 20;
我认为完成此操作的唯一方法是制作一个主表,并在我插入它们时为每一行分配一个虚拟整数:
id | type | description | dummy_integer
--------------------------------------------
... car ... 0
... plane ... 1
... train ... 2
... car ... 3
... plane ... 4
... train ... 5
... ... ... ...
... car ... 8000
... car ... 8001
... car ... 8002
... ... ... ...
然后我可以这样做:
SELECT * FROM master_table ORDER BY dummy_integer ASC LIMIT 20;
并且分页是通过使用最后看到的 dummy_integer 完成的:
SELECT * FROM master_table WHERE dummy_integer > 20
ORDER BY dummy_integer ASC LIMIT 20;
然后问题就变成了,例如,当我获得一些新的火车记录时,我可以将它们附加到 master_table 的末尾,但是它们的虚拟整数值会将它们一直放在最后。因此,如果用户从一开始就开始查看我的页面,他们将不会看到更新的火车数据,直到他们翻阅汽车沙漠,而不是与前面的汽车/飞机很好地交错。
除了上述(不太好)的方法之外,还有什么好的方法吗?
谢谢