gpt4 book ai didi

php - MySQL选择3个随机行,其中三行之和小于值

转载 作者:可可西里 更新时间:2023-11-01 06:32:36 24 4
gpt4 key购买 nike

我试图从表中随机选择三个行,它们的组合 item_price列少于所需的数量。

假设您有一个 <input>一美元的金额。当您输入美元金额时,数据库会返回三个随机项目,它们的总价格小于或等于您输入的美元金额。

如果我输入 300 美元,您可以购买这三件商品:150 美元、100 美元和 50 美元。我在创建将返回符合此条件的三个项目的查询时遇到困难。

SELECT t1.item_id, t1.item_price
FROM items t1
INNER JOIN items t2 ON ( t1.item_id = t2.item_id )
GROUP BY t1.item_id, t1.item_name, t1.item_price
HAVING SUM( t2.item_price ) <=300
ORDER BY RAND( )
LIMIT 3

我认为这会起作用,但我认为它起作用只是巧合。它似乎只退回价格低于 300 美元的任何三件商品,总计不低于 300 美元。

我也试过这个查询:

SELECT t1.item_id, t1.item_price
FROM items t1
JOIN items t2 ON t2.item_id <= t1.item_id
WHERE t2.item_price <= 500
GROUP BY t1.item_id
HAVING SUM(t2.item_price) <= 500
ORDER BY RAND()
LIMIT 3

同样,一开始似乎可行,但随后它开始以 2000 美元的价格返回。

如果在 PHP 中有更好的(甚至牺牲性能)方法来执行此操作,我不介意。只是没想到查询会这么难。

一如既往,感谢任何人的帮助。

最佳答案

这是另一种解决方案:

SELECT t1.item_id as id1, t2.item_id as id2, t3.item_id as i3
FROM items t1, items t2, items t3
WHERE
t1.item_id <> t2.item_id and
t1.item_id <> t3.item_id and
t2.item_id <> t3.item_id and
(t1.item_price + t2.item_price + t3.item_price) <= 300
order by rand()
limit 1

您可以选择按最小金额过滤

关于php - MySQL选择3个随机行,其中三行之和小于值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29474455/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com