Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/238.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,其中SUM(value)大于联合查询中的特定值_Php_Mysql_Sql - Fatal编程技术网

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
;