我有一个boxes
表,其中包含box_size
列。
我想获取总大小为16的行。
我该怎么做?
例如:
box_size = 1
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值来计算。
答案 0 :(得分:1)
如果您需要从最小到最大框中挑选数据,那么这将有助于您:
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
的总和,然后是主查询将返回总和小于或等于16的所有方框;
如果您需要从最大框开始,可以使用如下查询:
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;
我刚测试了上面的例子,它就像一个魅力!
答案 1 :(得分:0)
不是100%确定这是否是您正在寻找的,但您可以执行以下查询:
SELECT * FROM `boxes` WHERE `box_size` = 1 LIMIT 16; #returns 16 boxes of box_size 1
SELECT * FROM `boxes` WHERE `box_size` = 4 LIMIT 2; #returns 2 boxes of box_size 4
SELECT * FROM `boxes` WHERE `box_size` = 2 LIMIT 4; #returns 4 boxes of box_size 2
答案 2 :(得分:0)
您可以在where子句中输入该区域的总计来解决此问题,
SET @size_sum:=0;
SELECT @size_sum:=(@size_sum + POW(box_size,2)) as size_sum, box_size
FROM table WHERE @size_sum <= 16;
注意:POW
函数用于计算框的区域