php - 更新记录时出错 : Invalid use of group function for updating previous all data

标签 php mysql

$sql = "UPDATE purchase SET stat='1' WHERE `id`='$id' AND 4*(plan)<= sum(plan) ";

或者

$sql = "UPDATE purchase SET stat='1' WHERE `id`='$id' AND 4*(plan-1)<= sum(plan-1) ";

我试图通过此更新进行查询,如果所有行的总和大于第一行,它将更新第一行,并且此规则适用于所有行。但它显示错误并显示

Error updating record: Invalid use of group function 

此查询有什么问题?我需要有关此错误的帮助。

最佳答案

您不能在查询的 WHERE 子句中使用诸如 SUM() 之类的聚合函数,因为 SUM() 是经过计算的覆盖所有选定的行,但使用 WHERE 来选择行。您需要在单独的查询中计算总和,然后加入它。

UPDATE purchase
JOIN (SELECT SUM(plan) AS plantotal FROM purchase) AS p1
    ON 4*(plan-1) <= plantotal
SET stat = '1'
WHERE id = '$id'

要将更新基于具有较高 ID 的所有行,您可以使用子查询来连接,该子查询获取每组行的总计。

UPDATE purchase AS p
JOIN (SELECT p1.id AS id, SUM(p2.plan) AS plantotal
      FROM purchase AS p1
      JOIN purchase AS p2 ON p2.id > p1.id) AS p3
ON p3.id = p.id AND 4*(p.plan-1) <= p3.plantotal
SET stat = '1'

关于php - 更新记录时出错 : Invalid use of group function for updating previous all data,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50936577/

相关文章:

mysql - CHAR 字段只能有某些值 - CONSTRAINT

mysql - 将列修改为 utf8 的语句在使用 (ALTER IGNORE TABLE with MODIFY) 时出错

mysql - 如何在MySQL中记录事件发生次数到机器

javascript - 在同一页面上处理来自 ajax 驱动的 Fancybox 元素的 PHP 请求

php - 如果用户尝试登录多次,如何触发?

php - 手动将mysql查询结果缓存到txt文件

php - 如果导入了 css,如何将版本号添加到 css?

php - 如何捕获 fatal error

linux - 如果使用 php nusoap 在 WSDL 中未定义操作,如何修复

php - mysql_fetch_array()/mysql_fetch_assoc()/mysql_fetch_row()/mysql_num_rows 等...期望参数 1 是资源