是否可以合并这些查询?
$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)
答案 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'";