创建受影响的行数组并在另一个查询中处理它们

时间:2015-03-15 01:31:20

标签: php mysql

概述:

我无法弄清楚如何从查询中创建受影响的行数组,并在另一个查询中处理每个行。

详细说明:

我的第一个查询标记了过去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());

1 个答案:

答案 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列是什么。