如何解决PostgreSQL-有限制的联接表
我想向用户显示每个商店的购买摘要,最多显示每个商店的前3个购买。 为了简单起见,购买数量是不可配置的。因此,它不是前N个,而是前3个
让我说这些表带有这些列
Store
id
name
Product
id
name
storeId
price
Purchase
id
userId
productId
count
purchaseTime
这就是我要显示的
-----------------------------------------------
| store | product | count | price |
-----------------------------------------------
| disney | stitch doll | 1 | 30 |
| | donald cap | 3 | 15 |
| | ticket | 2 | 100 |
-----------------------------------------------
| universal | iron man figure | 1 | 100 |
| | batman figure | 1 | 90 |
-----------------------------------------------
最好,如果用户购买了2次独立购买的唐纳德上限(假设价格永远不会改变),则购买次数将合并在一起
例如:如果用户先购买2个唐纳德帽,然后再购买1个唐纳德帽,那么结果将是3个唐纳德帽-而不是2个唐纳德帽和1个唐纳德帽
我正在使用休眠和Postgresql
我什至不知道从哪里开始,特别是如何将每家商店的购买量限制为3个
任何提示,伪解决方案或任何解决方案都将受到赞赏
谢谢
注意: 不幸的是,我有一个重大的疏忽。 我想我要在1行中获得每个摘要
例如
id | Store | Product1 | count1 | price1 | Product2 | count2 | price2 | Product3 | count3 | price3
----------------------------------------------------------------------------------------------------------------------------------
2 | Disney | stitch doll | 1 | 30 | donald cap | 3 | 15 | ticket | 2 | 100
5 | Universal | iron man figure | 1 | 100 | batman figure | 1 | 90 | null | null | null
原因是:我需要对结果进行分页-每页显示10个购买摘要 如果每个摘要返回1-3行,则很难弄清楚下一页的结果
解决方法
您可以使用横向联接来检索每家商店的前3次购买:
TextField(
style: TextStyle(color: Colors.red),controller: _controller,focusNode: _focusNode,cursorColor: Colors.red,onChanged: (s) {
print(s);
},),
或者,您可以使用CustomTextAction:
- index: 10
- type: "insertion"
- value: "d"
:
select s.name,p.*
from store s
cross join lateral (
select pr.name as product,pu.count,pr.price
from purchase pu
inner join product pr on pr.id = pu.productid
where pr.storeid = s.id and pu.userid = ?
order by pu.purchasetime
limit 3
) p
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。