Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从mysql中选择几行,指定一列的总和_Php_Mysql - Fatal编程技术网

Php 从mysql中选择几行,指定一列的总和

Php 从mysql中选择几行,指定一列的总和,php,mysql,Php,Mysql,我有两张桌子 表项目信息: ID | Name | Price ---+------------+------- 1 | Item one | 0.2 2 | Item two | 0.3 3 | Item three | 0.1 4 | Item four | 0.6 ID | item_id | available ---+---------+---------- 1 | 1 | 1 2 | 3 | 1 3 | 2 |

我有两张桌子

项目信息

ID | Name       | Price
---+------------+-------
1  | Item one   | 0.2
2  | Item two   | 0.3
3  | Item three | 0.1
4  | Item four  | 0.6
ID | item_id | available
---+---------+----------
1  |       1 | 1
2  |       3 | 1
3  |       2 | 1
4  |       1 | 1
5  |       4 | 1
etc..
项目列表

ID | Name       | Price
---+------------+-------
1  | Item one   | 0.2
2  | Item two   | 0.3
3  | Item three | 0.1
4  | Item four  | 0.6
ID | item_id | available
---+---------+----------
1  |       1 | 1
2  |       3 | 1
3  |       2 | 1
4  |       1 | 1
5  |       4 | 1
etc..
我需要从表项目列表中选择任意数量的行,该列表与表项目信息在表项目信息中的价格
列的总和中连接起来$

例如,它可以选择具有项目列表的3行。项目id=1,2,3或具有项目列表的一行。项目id4-不管如何,但结果总和不应超过0.6$

此外,我还需要选择项目列表。可用=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
选择item\u list.ID、item\u info.Name
从项目列表
项目信息上的内部联接项目信息。ID=项目列表。项目ID
其中,item_list.available=1

和行总和item_info.price逻辑相对简单,但是,无论它变得多么复杂,都无法在单个查询中实现。显然,您可以使用mysql中的存储过程来实现逻辑,也可以使用php

  • 数一数物品,这些价格低于或等于你的限额。如果该值为0,则表示您没有符合条件的项目或列表已准备就绪-请参阅下面的步骤3
  • 通过生成一个介于0和count-1之间的随机整数并在limit语句中使用,检索1个随机项目及其价格,该价格小于或等于您的限额:

    选择itemid,按itemid限制随机数从表订单中选择价格,1

  • 从限额中扣除价格。如果您的剩余限制为0,则您有您的列表。如果没有,则重复上述步骤,剩余限额将变为新限额。如果不想在列表中包含同一项两次,则在重复上述步骤时,通过向where子句添加not in()来排除列表中的ItemID


  • 你到底想做什么?你遇到了什么错误/问题?用户给了我0.6美元,我需要给他该价格的任何随机项目。你不能用简单的查询做到这一点。它可以是带有变量的复杂查询或任何其他。。。我试过了,但6个小时后没有发现任何合适的结果。你可以在PHP端完成。接下来的想法是:用户给你一些钱,
    $total
    ,你从price<$total
    中获取物品,然后从结果数组中获取第一个(或随机)元素。减去
    $money=$total-$itemPrice
    ,然后在结果数组中找到具有itemPrice
    的元素,我以前尝试过这样做,但认为这不是最好的方法。。。但是寻找所有的回应——也许这样的方式是最好的。我唯一担心的是很多查询,这些查询可能会由这个算法生成。。。如果我选择了几行,但它的总和会更低,我将需要进行第二次查询和第三次mb。。。