根据另一个表中的条件更新表

时间:2016-03-23 11:14:23

标签: php mysql cron

我有2个数据库表

1-用户

id  points

1  100         
2  3          
3  1 

2- user_pages

user_id  lp_flag

1        0        
2        0          
3        0    

我正在尝试更新lp_flag = 1,如果有任何id点<用户表中有5个。

这是我的代码,我想仅使用cron job运行它。

$Point_row = mysql_query("SELECT * FROM users WHERE points < 5 ");

 foreach($Point_row as $val){if($val['points']<5) {

mysql_query("UPDATE user_pages SET lp_flag = '1' WHERE user_id = '$id'")
}else{

mysql_query("UPDATE user_pages SET lp_flag = '0' WHERE user_id = '$id'") }
}
}

预期结果

user_pages

user_id  lp_flag

1        0        
2        1          
3        1

因为id为2&amp;用户表中的3个点<5。

2 个答案:

答案 0 :(得分:1)

您应该在一个查询中执行此操作:

update user_pages up join
       users u
       on up.user_id = u.id
    set up.lp_flag2 = (case when u.points < 5 then 2 else 0 end);

在应用程序端不需要循环。

答案 1 :(得分:0)

您可以使用:

UPDATE user_pages SET lp_flag = 1
WHERE user_id IN (SELECT id FROM users WHERE points < 5)

如果lp_flag的默认值为'0',则不需要对UPDATE'0'使用ELSE条件。