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

标签 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 中设置 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());

最佳答案

循环遍历所有用户的效率很低,所以我将向您展示推荐的方式。

你可以有一个像这样的单个 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 列是什么。

关于php - 创建受影响行的数组并在另一个查询中处理它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29056278/

相关文章:

php - SQL从脏数据集创建新数据库

php - laravel 按日期检索记录

php - 使用ajax上传文件

php - Mysql准备语句LIKE问题

php - 为什么我的 php 从 mysql 返回一个值(一行)?

php - 从 CS 购物车的网站搜索中排除类别

mysql - 当我在页面加载时使用数据读取器附加文本框的内容时,更新查询不起作用

php - MySQL 查询不考虑 GROUP BY

php - wordpress-action hook 'pre publish post' ?

php - 带计数的sql请求