我花了很多时间寻找解决当前问题的方法,但没有运气。
我有4张桌子:
- 的任务
ACC_ID key value
10000 LOGIN 1
10000 LOGINCNT 3
10000 LOGINTMR 8465
10002 LOGIN 0
10002 LOGINCNT 2
10002 LOGINTMR 82415
10003 LOGIN 1
10003 LOGINCNT 1
10003 LOGINTMR 3650
- 的字符
*C_ID ACC_ID Online
100 10000 1
101 10000 0
102 10001 0
103 10000 0
104 10002 1
105 10003 1
106 10002 0
107 10000 0
108 10003 0
- 邮件
*M_ID C_ID Title Message
1 100 Event Free Gift
2 100 Event Free Gift
3 104 Event Free Gift
4 105 Event Free Gift
- 的 mail_item
*ID M_ID Item_ID Amnt
1 1 3521 1
2 1 3522 1
3 3 3521 1
4 3 3522 1
5 2 1638 8
6 4 3521 1
7 4 3522 1
注意:带*的列对于该表是唯一的
根据这些条件,任务表格中UPDATE
每个值我想要做的是......:
请注意字符上有很多行, ACC_ID 10000但只有1行在线。其他 ACC_ID 可能根本没有在线角色。因此,如果对字符进行查询,则应返回 online = 1的行或 online = 0时的最后结果。
由于这种情况的复杂性,它让我头晕目眩。我希望有人可以提供帮助。
答案 0 :(得分:1)
以下是UPDATE
查询:
UPDATE quest AS q
LEFT JOIN (
SELECT acc_id, MAX(online) AS online
FROM characters
GROUP BY acc_id) AS c
ON q.acc_id = c.acc_id
SET q.value =
CASE q.key
WHEN 'LOGIN' THEN IFNULL(c.online, 0)
WHEN 'LOGINMTR' THEN IF(IFNULL(c.online, 0), UNIX_TIMESTAMP(), 0)
ELSE q.value
END
INSERT
:
INSERT INTO mail (c_id, title, message)
SELECT c.c_id, 'Event', 'Free Gift'
FROM characters AS c
JOIN quest AS q ON c.acc_id = q.acc_id
WHERE q.key = 'LOGIN'
AND c.online = 1
我不明白应该在mail_item
插入什么内容。