从mysql中选择多行,并指定一列

时间:2015-10-21 22:14:13

标签: php mysql

我有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

但它不是最好的方法,是从最便宜到最贵的选择项目,也是之前读完全表...不是我认为解决这个问题的最佳方法

1 个答案:

答案 0 :(得分:0)

逻辑相对简单,但无论它有多复杂,它都无法在单个查询中实现。显然,你可以在mysql中使用存储过程来实现逻辑,或者你也可以使用php。

  1. 计算物品,这些物品的价格小于或等于您的限额。如果这是0,那么您没有符合条件的项目或列表已准备就绪 - 请参阅下面的步骤3.
  2. 通过生成0到count-1之间的随机整数并在限制语句中使用它来检索1个随机项及其价格,该价格小于或等于您的限制:

    select itemid, price from table order by itemid limit randomnumber, 1

  3. 从限额中扣除价格。如果您的剩余限额为0,那么您就有了清单。如果没有,请重复上述步骤,将剩余的限制变为新限制。如果您不想在列表中包含两次相同的项目,则在重复上述步骤时,通过在where子句中添加not in()来排除列表中的项目。