是否可以合并这些查询?

时间:2011-03-12 15:07:44

标签: 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)

2 个答案:

答案 0 :(得分:1)

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

如果还不晚,我建议您删除friends字段,以支持用户和朋友之间的映射表。

答案 1 :(得分:0)

你试过这个:

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