我有2张桌子
表 item_info :
ID | Name | Price
---+------------+-------
1 | Item one | 0.2
2 | Item two | 0.3
3 | Item three | 0.1
4 | Item four | 0.6
表 item_list :
ID | item_id | available
---+---------+----------
1 | 1 | 1
2 | 3 | 1
3 | 2 | 1
4 | 1 | 1
5 | 4 | 1
etc..
我需要从表 item_list 中选择任意数量的行,该表与表价格中的表 item_info 一起从表< strong> item_info = 0.6 $
例如,它可以选择 item_list.item_id = 1,2,3的3行或 item_list.item_id 4的一行 - 无论如何但结果应该是总和不超过0.6美元
我还需要选择item_list.available = 1项,而不是稍后将它们标记为
我尝试了一些请求,但没有真正可用的
我需要像
这样的东西select item_list.ID, item_info.Name
from item_list
inner join item_info on item_info.ID=item_list.item_id
where item_list.available = 1
and total sum of rows item_info.price <= 0.6
我尝试使用变量
select @sum:=0;
select *,@sum:=@sum+price as total_sum from (
select item_list.ID,item_info.price from item_list
inner join item_info on item_info.ID=item_list.item_id
where item_list.available=1
order by price asc
) s
having total_sum<=0.6
但它不是最好的方法,是从最便宜到最贵的选择项目,也是之前读完全表...不是我认为解决这个问题的最佳方法
答案 0 :(得分:0)
逻辑相对简单,但无论它有多复杂,它都无法在单个查询中实现。显然,你可以在mysql中使用存储过程来实现逻辑,或者你也可以使用php。
通过生成0到count-1之间的随机整数并在限制语句中使用它来检索1个随机项及其价格,该价格小于或等于您的限制:
select itemid, price from table order by itemid limit randomnumber, 1
从限额中扣除价格。如果您的剩余限额为0,那么您就有了清单。如果没有,请重复上述步骤,将剩余的限制变为新限制。如果您不想在列表中包含两次相同的项目,则在重复上述步骤时,通过在where子句中添加not in()来排除列表中的项目。