如何解决当一组数据可以来自2行或更多行时,使用OFFSET和LIMIT从MySQL表中获取数据集
假设我有一个包含以下数据的MySQL表“ orders”:
| id | order_no | item_id |金额|日期时间|
| 1 | 123 | 901 | 1 | 2020-08-05 00:00:01 |
| 2 | 324 | 902 | 2 | 2020-08-06 00:00:01 |
| 3 | 324 | 905 | 1 | 2020-08-06 00:00:01 |
| 4 | 511 | 902 | 1 | 2020-08-07 00:00:01 |
| 5 | 400 | 904 | 3 | 2020-08-08 00:00:01 |
| 6 | 195 | 903 | 1 | 2020-08-09 00:00:01 |
| 7 | 195 | 905 | 2 | 2020-08-09 00:00:01 |
| 8 | 250 | 908 | 1 | 2020-08-10 00:00:01 |
| 9 | 222 | 901 | 3 | 2020-08-11 00:00:01 |
| 10 | 315 | 903 | 1 | 2020-08-12 00:00:01 |
| 11 | 315 | 905 | 2 | 2020-08-12 00:00:01 |
| 12 | 198 | 903 | 1 | 2020-08-13 00:00:01 |
| 13 | 651 | 902 | 2 | 2020-08-14 00:00:01 |
| 14 | 651 | 907 | 2 | 2020-08-14 00:00:01 |
| 15 | 405 | 902 | 1 | 2020-08-15 00:00:01 |
| 16 | 112 | 905 | 1 | 2020-08-16 00:00:01 |
,在我的网站上,我想根据用户设置显示订单,例如:每页订单数/页码。数据需要按'datetime'的升序进行排序,因此,如果页码是2,每页的订单数= 5,则我需要id-s 8-14的数据(因为id 1-7的行成为第一个5个订单和8-14:第二个订单)。请注意,某些订单(粗体)具有2行(并且可以有更多行),它们具有相同的order_no但具有不同的item_id。
除非我将它们与某些子查询结合使用,否则简单的LIMIT和OFFSET子句在这里没有用处,但是到目前为止,我还没有找到解决方案。
解决方法
我想出了一种我认为最适合我的解决方案:一个表“ orders”包含所有订单“ header”数据+订单的第一项(每项数据都在单独的列中,例如item_id ,金额等),然后再显示另一列:JSON类型的“ items”(如果存在2个或更多,则存储第二个和其他项目);这样,我将能够使用LIMIT和OFFSET,并且只需要一个查询,特别是用于插入新订单,这使我最担心,因为使用2个表时,我将不得不使用事务。
选择查询,在大多数情况下会很简单,每个订单仅包含2个或更多项目,我将需要处理JSON列中的项目,就像我在评论中提到的那样,它完全不会损害性能只包含一项。
谢谢@Shadow的评论,它们确实帮助我找到了解决方案,因为我认为我往错误的方向前进。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。