php - 如何使用mysql和php实现基于成本的单表排列组合?
问题描述
我有一张桌子
- sr_id是具有自动增量的主键
- skuid是每个产品的标识号 &
- 价格是该产品的成本
表名:sample_records
sr_id | skuid | price
----------------------
1 | SKOO1 | 12
2 | SKOO2 | 7
3 | SKOO3 | 56
4 | SKOO4 | 3
5 | SKOO5 | 23
6 | SKOO6 | 50
7 | SKOO7 | 34
8 | SKOO8 | 5
9 | SKOO9 | 23
10 | SKO10 | 56
11 | SKO11 | 101
12 | SKO12 | 4
13 | SKO13 | 23
14 | SKO14 | 56
现在我需要一个基于价格的组合。假设我将成本设为 500。以下是预期结果:
ROW | skuid | quantity | cost |
---------------------------------------------
1 | SKOO1 | 41 | 492
---------------------------------------------
2 | SKOO1,SKOO2 | 41,1 | 497
---------------------------------------------
3 | SKOO1,SKOO2 | 40,2 | 494
---------------------------------------------
4 | SKOO1,SKOO2,SKOO8 | 40,2 1 | 499
---------------------------------------------
.
.
.
结果应该得到所有组合.. 注意:-
- 数量和成本是动态添加的列。
请帮我找到一个可行的解决方案。
解决方案
您可以使用递归 CTE 来获取排列:
with recursive cte as (
select cast(skuid as char(1000)) skuids, price, skuid as max_skuid
from sample
where price < 50
union all
select concat_ws(',', cte.skuids, s.skuid), cte.price + s.price, s.skuid
from cte join
sample s
on s.skuid > cte.max_skuid and
s.price + cte.price < 50
)
select *
from cte;
这是一个 db<>fiddle。
推荐阅读
- java - 将 java 数据列表转换为 JSON 数组数组
- javascript - 在客户端执行过滤并在服务器端进行搜索
- java - 从 SCDF 启动任务时如何解决执行“java.lang.IllegalArgumentException: Invalid TaskExecution, ID 3”?
- swift - 过滤 Firebase 数据 SwiftUI
- apache-royale - apache Royale 现在支持双向数据绑定吗?
- html - 注册后欢迎电子邮件中的添加到日历按钮
- javascript - 不起作用,Javascript 在单击按钮之前验证文本输入
- shell - 是否有任何 Dart 资源可以将命令行字符串拆分为列表
论据? - amazon-web-services - AWS S3 CLI 在使用 mv 命令时创建多个目录
- javascript - 如何将表单变量和画布图片发送到 php 服务器?