我想提前感谢所有人在以下问题上提供的任何帮助。
在mysql中我有以下表格:
从MembersProducts选择id,product_id;
Member Products id | product_id 1 | 2 1 | 3 1 | 4 1 | 5 1 | 6 2 | 5 2 | 6
从Schedule中选择id,(TimesPerDay * TimesPerWeek);
Schedule id | (TimesPerDay * TimesPerWeek) 1 | 2 2 | 1
我想创建一个生成下表的查询:
Member Products id | product_id 1 | 2 1 | 3 2 | 5
我的目标是让每个id的(TimesPerDay * TimesPerWeek)列限制product_id的数量。
答案 0 :(得分:1)
SELECT mp.*
FROM MembersProducts mp
LEFT JOIN Schedule s ON mp.id=s.id
WHERE (SELECT COUNT(*)
FROM MembersProducts mp2
WHERE mp2.id=mp.id
AND mp2.product_id<mp.product_id
) < s.TimesPerDay*s.TimesPerWeek
这样做基本上是一个“每组最大n次”的选择,其中n
每组也不同。
WHERE
计算已经选择了多少其他产品,只有在选择不够时才选择它们(足够的是TimesPerDay * TimesPerWeek)。
答案 1 :(得分:0)
select e.id, e.product_id
from (select @rank:=CASE WHEN @ranked <> id THEN 1 ELSE @rank+1 END as rank,
id,
product_id,
@ranked:=id
from
(select @rank := -1) a,
(select @ranked :=- 1) b,
(select * from member_products order by id) c
) e
inner join (select id, (TimesPerDay * TimesPerWeek) as times from schedule) sch
on sch.id = e.id and e.rank <= sch.times;
丑陋的样子,但这将完全符合你的需要。