mysql - 是否可以合并这些查询?

标签 mysql sql

是否可以合并这些查询?

$sql1 = "UPDATE  users AS u, invites AS i 
              SET u.uinvite = u.uinvite - 1, u.ufriends = CONCAT(u.ufriends, ',$iid'), i.seen = 1
              WHERE u.uid = '$uid' AND i.invited_uid = '$uid' AND i.invitor_uid = '$iid'";
$sql2 = "UPDATE users
              SET ufriends = CONCAT(ufriends, ',$uid')
              WHERE uid = '$iid'";

变量解释:

$uid = the users ID            $iid = the friends ID

这是我尝试合并:

$mergesql = "UPDATE invites AS i, users AS u 
                  SET
                      CASE
                      WHEN u.uid = '$uid' THEN u.uinvite=u.uinvite-1, u.ufriends = CONCAT(u.ufriends,',$iid')
                      ELSE u.ufriends = CONCAT(u.ufriends,',$uid')
                      END
                      , i.seen = '1'      
                  WHERE i.invited_uid = '$uid' AND i.invitor_uid = '$iid' 
                  AND (u.uid = '$uid' OR u.uid = '$iid')"

当你必须做更复杂的查询时,我发现很难理解 mysql 是如何工作的。 我的英语也缺乏专业知识,如果你知道一个好的教程,你会让我非常高兴! (不是来自MySQL网站的,它正在杀死=S)

最佳答案

了解 MySQL,可能有一种方法可以在一个查询中执行此操作,但我认为您根本不会获得任何好处,因为您是基于完全独立的键进行更新。这样做实际上可能很危险,因为结果是不可预测的。通过两个查询来完成,很容易弄清楚发生了什么。

如果还不算太晚,我建议您删除 friends 字段,转而使用用户和好友之间的映射表。

关于mysql - 是否可以合并这些查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5283288/

相关文章:

php - 如何从后期编辑的下拉列表中获取选定的值

mysql - 优化 group_concat 函数的 MySQL 查询

sql - 从同一台服务器访问另一个数据库?

SQL Server 根据另一个表替换字符串

mysql - 即使在相关表中找不到相关记录,也可以从一个表中检索所有记录

mysql - LEFT JOIN 和 COUNT 两个查询的区别

java - Spring Mvc-从数据库中删除用户

php - 如何防止 PHP 中的 SQL 注入(inject)?

mysql - 尝试连接到本地主机 mysql 服务器时获取 "ERROR 2026 (HY000): SSL connection error: ASN: bad other signature confirmation"

mysql - 无法连接到 'localhost' (10061) 上的 MySQL 服务器