gpt4 book ai didi

php - MySQL 限制参数相对于行值

转载 作者:行者123 更新时间:2023-11-29 03:03:45 26 4
gpt4 key购买 nike

我有一个包含 box_size 列的 boxes 表。我想获取总大小为 16 的行。
我应该怎么做?

例如:

  • 使用 box_size = 1 获取 16 行
  • 或两行 box_size = 4 和 4 行 box_size = 2
  • 等等

编辑:

我现在有这个选择查询:

select * from `boxes` order by `boxes`.`box_size` DESC, `date` DESC

因此,如果我们只有 box_size = 1 的行,我将需要 LIMIT 0, 16 并且如果我有所有行 box_size = 4 我需要 LIMIT 0, 4

但每一行都有自己的 box_size,所以我不能有具体的限制数字,它应该相对于获取的 box_size 值进行计算。

最佳答案

如果您需要从从最小到最大 盒子中挑选数据,那么这将帮助您:

SELECT * FROM (
SELECT *, @sum:=@sum + box_size total_size FROM boxes
JOIN ( SELECT @sum := 0 ) xa
ORDER BY box_size
) t
WHERE total_size <= 16;

嵌套查询会从小到大遍历所有的盒子,将当前盒子的box_size加起来等于之前所有盒子的box_size之和boxes,那么主查询将返回所有总和小于或等于16的boxes;

如果您需要从最大到最小框,您可以使用这样的查询:

SELECT * FROM (
SELECT
*,
@potential_total := @sum + box_size,
@potential_total <= 16 as is_valid,
@sum := IF( @potential_total <= 16, @potential_total, @sum) total_size
FROM boxes
JOIN ( SELECT @sum := 0 ) xa
ORDER BY box_size DESC
) t
WHERE total_size <= 16 and is_valid = true;

我刚刚测试了上面的例子,它的效果非常好!

关于php - MySQL 限制参数相对于行值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19057021/

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