Php MySQL,其中SUM(value)大于联合查询中的特定值
以下查询不起作用:Php MySQL,其中SUM(value)大于联合查询中的特定值,php,mysql,sql,Php,Mysql,Sql,以下查询不起作用: ( SELECT * FROM `items` WHERE `name` LIKE '%SCAR%' AND `rarity` = 'Legendary' ORDER BY weight / RAND( ) DESC LIMIT 0, 1 ) UNION ( SELECT * FROM `items` WHERE `rarity` = 'Legendary' ORDER BY weight / RAN
(
SELECT *
FROM `items`
WHERE `name` LIKE '%SCAR%' AND `rarity` = 'Legendary'
ORDER BY weight / RAND( ) DESC
LIMIT 0, 1
)
UNION
(
SELECT *
FROM `items`
WHERE `rarity` = 'Legendary'
ORDER BY weight / RAND( ) DESC
LIMIT 0, 3
)
UNION
(
SELECT *
FROM `items`
WHERE `rarity` = 'Epic'
ORDER BY weight / RAND( ) DESC
LIMIT 0, 1
)
GROUP BY
weight
HAVING
SUM(value) < 100
ORDER BY
RAND()
我该如何添加一个条件,即从数据库中选择的所有行的值总和字段至少有一个设置值,如1000?谢谢选择素材
SELECT stuff
FROM (unions) AS u
GROUP BY u.somefield
HAVING SUM(u.anotherfield) < somevalue
;
来自(工会)美国
按u.somefield分组
具有总和(u.anotherfield)
使联合成为子查询。但请注意,选择非聚合、非分组字段通常是不受欢迎的,除了MySQL之外,其他所有人都不允许这样做(即使是最新版本的默认配置也不允许这样做),对于这种查询来说,这可能是一个非常糟糕的主意
而且,
RAND()
并不总是按照您认为应该的方式运行。在联合查询中,您可能会将每个权重除以不同的RAND()值(因为它必须针对每个权重进行计算);但是您的最后一个ORDER BY RAND()
可能是使用同一个RAND()值对所有结果进行排序,因为mysql可能会使用一个快捷方式,并且只对其求值一次。您需要将您的整个联合视为一个子查询。@uuerdo您能帮助我吗?因为我对SQL不是很在行。我对上次ORDER BY RAND()并不太感兴趣,那只是为了在我根据AJAX请求在我的网站上显示记录时将记录随机地混在一起,但是我如何才能使/确保权重被不同的RAND()划分?至少根据文档,看起来ORDER BY RAND()
应该可以。我似乎记得不是这样,但这可能是5.x之前版本的MySQL造成的。query运行不太正常,就像我曾经说过的,当值大于1000(SUM(u.anotherfield)>1000)时,它什么也没有查询回来。我尝试了SUM(u.anotherfield)<4000,它带回了4条记录,大约等于2800条。如何创建分组字段?我输入了一个名为type的新字段,并给了它们所有名为item的相同值,以尝试将其用作item字段,但仍然一无所获。有没有其他方法来计算值字段的和?谢谢你的帮助我不知道你为什么期望不同的行为,你限制你联合的查询的方式,你不能保证联合的5条记录中有任何一条的值大于1000,更不用说相同权重的多条了。进一步考虑,我得到的印象是,您试图使用查询为随机的“战利品包”生成内容(总计特定值);我真的不认为sql是实现这种功能的方法。
SELECT stuff
FROM (unions) AS u
GROUP BY u.somefield
HAVING SUM(u.anotherfield) < somevalue
;