Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/235.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.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 当值等于最大值时如何更新?_Php_Sql_Max - Fatal编程技术网

Php 当值等于最大值时如何更新?

Php 当值等于最大值时如何更新?,php,sql,max,Php,Sql,Max,当成员点数等于最大值时,我正在尝试运行此查询以更新成员点数?要设置获奖者奖。。。但是我得到了这个错误。。谢谢 错误:您的SQL语法有错误;查看与MySQL服务器版本对应的手册,以了解第4行“WHERE a.points=maxa.points AND b.event_id=4”附近要使用的正确语法 $sql=" UPDATE engine4_event_membership a INNER JOIN engine4_event_events b ON b.event_id =

当成员点数等于最大值时,我正在尝试运行此查询以更新成员点数?要设置获奖者奖。。。但是我得到了这个错误。。谢谢

错误:您的SQL语法有错误;查看与MySQL服务器版本对应的手册,以了解第4行“WHERE a.points=maxa.points AND b.event_id=4”附近要使用的正确语法

$sql=" UPDATE engine4_event_membership a INNER JOIN engine4_event_events b ON b.event_id = a.resource_id SET a.points = a.points + case b.prize WHERE a.points = max(a.points) AND b.event_id = '{$this->event->getIdentity()}'; ";
如果我正确理解了数据结构,您可以使用WHERE子句中的相关子查询来完成这项工作

您正在更新成员资格表,其中resource_id是输入标识。您正在查找具有最大点数的记录。应采取以下措施:

UPDATE engine4_event_membership a join
       engine4_event_events b
       on b.event_id = a.resource_id
    SET a.points = a.points + b.prize 
    WHERE a.resource_id = '{$this->event->getIdentity()}' and
          a.points = (select max(a2.points)
                      from engine4_event_membership a2
                      where a2.resource_id a.resource_id
                     )
这可能会得到相同的MySQL错误。因此,WHERE子句需要移动到联接:

UPDATE engine4_event_membership a join
       engine4_event_events b
       on b.event_id = a.resource_id join
       (select resource_id, max(points) as maxpoints
        from engine4_event_membership
        group by resource_id
       ) amax
       on a.resource_id = amax.resource_id and
          a.points = amax.points
    SET a.points = a.points + b.prize 
    WHERE a.resource_id = '{$this->event->getIdentity()}'

无法在相关子查询中使用目标表是MySQL的一个限制。

从b.prize中删除case,因为@zerkms已经提到,如果$this->event->getIdentity在任何情况下都可以是字符串,那么您的代码可能容易受到SQL注入的攻击。如果我忘记删除它。。。我当时正在写一个if-else语句,但没用。。如果您使用用例,那么应该在末尾使用end。。。我现在得到这个错误,没有这个案例。。错误:组函数的使用无效我可以在末尾使用a2.resource_id='{$this->event->getIdentity}',但仍然得到错误:错误:您不能为中的更新指定目标表“a”,因为第二个版本的更新是这样的吗?这有效。。se4更新engine4\u事件\u成员身份a加入engine4\u事件\u事件b在b上。事件\u id=a。资源\u id加入选择资源\u id,maxpoints作为engine4_event_成员资格组中的maxpoints,由b.event_id=amax.resource_id和a.points=maxpoints集合a.points=a.points+b.prize上的resource_id amax组成,其中a.resource_id='{$this->event->getIdentity}'