gpt4 book ai didi

sql - 通过三个数据表分页?

转载 作者:行者123 更新时间:2023-12-03 17:16:10 31 4
gpt4 key购买 nike

我有三个数据表:

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的末尾,但是它们的虚拟整数值会将它们一直放在末尾。因此,如果用户从头开始查看我的页面,他们将看不到较新的火车数据,直到他们翻阅汽车沙漠,而不是与汽车/飞机朝前很好地交错。

除了上述(不是很好)的方法之外,还有什么好方法吗?

谢谢

最佳答案

您查询中的逗号不是真的在执行联接吗?

我将使用UNIONORDER BY来实现:

SELECT id, type, description FROM cars
UNION
SELECT id, type, description FROM planes
UNION
SELECT id, type, description FROM trains
ORDER BY id, type


working example

对于分页,可以将 LIMITOFFSET一起使用(请参见 docs)。

关于sql - 通过三个数据表分页?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11094220/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com