MYSQL更新无效使用组功能

时间:2014-04-17 14:36:42

标签: mysql

我想更新某些客户的当前奖励积分,并且我正在运行以下查询:

UPDATE bp_booking SET `current_bonuspoints`= 
(SELECT customers_bonus_points FROM customers WHERE customers_id='505') 
WHERE` `customers_id`=505 AND date_altered=max(date_altered);

我得到的错误是#1111 - Invalid use of group function。我查看了THIS帖子,但我不确定如何应用我的问题答案。

PHP:

while ( $booking_result = xtc_db_fetch_array($booking_customers_id) ) {
            foreach ($booking_result as $value) {
                $update_bp = xtc_db_query("
                SET @ned = (SELECT max(date_altered) FROM bp_booking WHERE customers_id='".$value."');
                UPDATE bp_booking SET `current_bonuspoints`= (SELECT customers_bonus_points FROM customers WHERE customers_id='".$value."')  WHERE `customers_id`='".$value."' AND date_altered=@ned;");
                } 
        }

我尝试了上面的代码,但没有发生。

1 个答案:

答案 0 :(得分:1)

max(date_altered)无效......

您需要使用子选择或选择它,或将其作为输入。

(我不能为你重写查询,因为我不知道你的意图,但是想一想:date_altered = max(date_altered)是什么?它只适用于用户吗? 例如

where... date_altered = (select max(date _altered) from customers)

还是针对特定用户?

where... date_altered = (select max(date _altered) from customers where customers_id = 5)

DBMS需要知道它最大化的内容......以及错误背后的原因。


此代码有效,并显示您可以在更新中使用subselect:

create table a (a int);

insert into a values (1);
insert into a values (2);
insert into a values (3);

update a set a=4 where a = (select max(a) from a);

所有命令都成功执行,世界很高兴:)


在MySQL中,我觉得很奇怪,它不能按原样运行,使用:

update a  a1 join (select a, max(a) mm from a) a2 on a1.a = a2.a set a1.a = a2.mm 

或类似的东西。