我想更新某些客户的当前奖励积分,并且我正在运行以下查询:
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;");
}
}
我尝试了上面的代码,但没有发生。
答案 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);
所有命令都成功执行,世界很高兴:)
update a a1 join (select a, max(a) mm from a) a2 on a1.a = a2.a set a1.a = a2.mm
或类似的东西。