概述:
我无法弄清楚如何从查询中创建受影响的行数组,并在另一个查询中处理每个行。
详细说明:
我的第一个查询标记了过去90天内未登录的任何帐户处于非活动状态。在表phpbb_users中有一列 user_id 。对于第一个查询的任何受影响的行,我希望我想要一个包含 user_id 的数组。
// first query
$result = mysql_query("UPDATE phpbb_users SET user_type = '1', user_inactive_time = '$inactivetime', theinactivereason = '90dayssincelastlogin', user_inactive_reason = '3' WHERE DATE_ADD(FROM_UNIXTIME(user_lastvisit), INTERVAL 90 DAY) < NOW() AND user_type = '0' AND user_lastvisit != '0'")
or die(mysql_error());
然后我想从第一个查询到第二个查询处理数组中的每个 userid ,并在表phpbb_phonelist中处理SET activenumber ='0'。
// second query -> $user_id is the column user_id corresponding to each row in the first query
$result = mysql_query("UPDATE phpbb_phonelist SET activenumber = '0' WHERE whoid = '$user_id'")
or die(mysql_error());
答案 0 :(得分:1)
循环遍历所有用户是低效的,因此我将向您展示推荐的方式。
您可以像这样使用单个 SQL语句(请先在数据库副本上测试):
$result =
mysql_query("UPDATE phpbb_users, phpbb_phonelist
SET
phpbb_users.user_type = '1',
phpbb_users.user_inactive_time = '$inactivetime',
phpbb_users.theinactivereason = '90dayssincelastlogin',
phpbb_users.user_inactive_reason = '3',
phpbb_phonelist.activenumber = '0'
WHERE
DATE_ADD(FROM_UNIXTIME(phpbb_users.user_lastvisit), INTERVAL 90 DAY) < NOW()
AND phpbb_users.user_type = '0'
AND phpbb_users.user_lastvisit != '0'
AND phpbb_phonelist.whoid = phpbb_users.user_id ");
不确定您的用户ID列是什么。