当一组数据可以来自2行或更多行时,使用OFFSET和LIMIT从MySQL表中获取数据集



假设我有一个MySQL表'orders',其中包含以下数据:

|id|order_no|item_id|amount|datetime|
|1|123|901|1|2020-08-05 00:00:01|
|2|324|902|2|2020-08:06 00:00:01|
|3|224|905|1|2020:08-06 00:00:02|
1|4|511|902|1|2020-208-07 00:00:01||
|5|400|904|3|2020-08-0800:00:01|
|6|195|903|1|2020-08-09 00:00:01|
|7|295|905|2|2020-08:09 00:00:02|
|8|250|908|1|2020:08-10 00:00:01||
|9 |222|901|3|2020-08-11 00:00:01|1|
|10|315|303|1|2020-208-12 00:00:01
|11|315|905|2|2020-08-12 00:00:01|
|12|198|903|1|2020-08-23 00:00:01|
|13|651|902|2|2020年8月14日00:00:01
|14|651|907|2|202年8月4日00:00:02|
|15|405|902|1|2020年8月15日00:00:01 |
|16|112|905|1|2020年10月16日00:00:00|

在我的网站上,我想根据用户的设置显示订单,比如:每页订单/页码。数据需要按"datetime"升序排列,因此如果页码为2,每页的顺序=5,我将需要id-s 8-14的数据(因为id 1-7的行构成前5个顺序,8-14:第二个顺序(。请注意,有些订单(在bold中(有2行(并且可以有更多(具有相同的order_no但不同的item_id
简单的LIMIT和OFFSET子句在这里没有用,除非我将它们与一些子查询结合起来,但到目前为止我还没有找到解决方案。

我找到了一个我认为最适合我的解决方案:一个表"orders",包含所有订单的"header"数据+订单的第一项(每一项数据都在一个单独的列中,如item_id、amount等(,然后,另一列:JSON类型的"items",如果有2个或更多,则存储第二项和更多项;通过这种方式,我将能够使用LIMIT和OFFSET,并且只需要一个查询,尤其是插入新订单时,这让我最担心,因为有两个表,我将不得不使用一个事务
在大多数情况下,选择查询都很简单,每个订单只有2个或多个项目。我需要处理JSON列中的项目,正如我在评论中提到的,大多数订单只包含一个项目,这不会损害性能
感谢@Shadow的评论,他们真的帮助我找到了解决方案,因为我认为我走错了方向。

最新更新