php - 如何在更新前检查另一个表?

标签 php mysql sql pdo

我有这两张表:

 // users
+----+-------+-----------------------+--------+
| id | name  |       email           | active |
+----+-------+-----------------------+--------+
| 1  | peter | peter12@hotmail.com   | NULL   |
| 2  | jack  | most_wanted@gmail.com | NULL   |
| 3  | john  | john_20016@yahoo.com  | NULL   |
+----+-------+-----------------------+--------+

// activate
+----+---------+---------------------+
| id | post_id |   random_string     |
+----+---------+---------------------+
| 1  | 2       | fewklw23523kf       |
+----+---------+---------------------+

我也有这样的 URL:

http://example.com/activate.php?str=fewklw23523kf

我想做的就是:

  • GET['str']activate 表中的 random_string 列进行比较
  • 检查 active 列中的 NULL,其中 id = post_id

然后(如果有匹配的行)将 users 表中的 active 列设置为 1。我该怎么做?


$str = $_GET['str'];

$stm = $db_con->prepare( "UPDATE users SET active = 1
                          WHERE ( SELECT 1 FROM activate WHERE random_string = ? ) t AND
                                ( SELECT 1 FROM users WHERE t.post_id = id AND
                                                            active IS NULL ) ");

$stmt->execute(array($str));

我的查询没有按预期工作。

最佳答案

你可以使用连接

UPDATE users 
INNER JOIN activate on activate.post_id = user.id
SET active = 1        
WHERE activate.random_string = ? 
AND user.active IS NULL;

关于php - 如何在更新前检查另一个表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37350556/

相关文章:

sql - postgresql如何连接多个表以获得逗号分隔的输出

php - 在 PHP 的匿名函数中访问对象的私有(private)/ protected 属性

mysql - 计算给定2点,纬度和经度的距离

Mysql 在非常大的表上计算性能

mysql - MySQL 的 ASP.NET 成员资格/角色提供程序?

javascript - php/mysql 将数组写入json文件

mysql - SQL {setCharset} AUTO_INCRMENT=1' 在第 1 行

php - 如何在没有特色图片的情况下找到 Woocommerce 产品

php - JQuery 获取屏幕大小,php 生成图像?好方法?

php - 当有人发布内容时,Facebook 如何更新内容