我需要执行mysql查询以计算用户邮箱使用的空间。 消息线程可能由两方 (发件人/收件人)拥有多个邮件(回复,跟进),并标记有一个或多个标记(收件箱,发件等)。从几个表中获取不同的结果
必须满足以下条件:
a)用户是消息的收件人或作者;
b)消息由任何标签标记:1,2,3,4;
c)中不同的仅记录,即如果线程,包含消息标记有 4分的标签(例如图1和4的多于一个:收件箱和已发送)的计算 是在一个标签仅
我曾尝试下面的查询,但我没能获得不同的值 - 该 主题/值复制:
SELECT SUM(LENGTH(subject)+LENGTH(body)) AS sum
FROM om_msg_message omm
JOIN om_msg_index omi ON omm.mid = omi.mid
JOIN om_msg_tags_index omti ON omi.thread_id = omti.thread_id AND omti.uid = user_id
WHERE (omi.recipient = user_id OR omi.author = user_id) AND omti.tag_id IN (1,2,3,4)
GROUP BY omi.mid;
表的结构:
om_msg_message - 字段标题和正文都被计算
+--------------+------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------------+------------------+------+-----+---------+----------------+ | mid | int(10) unsigned | NO | PRI | NULL | auto_increment | | subject | varchar(255) | NO | | NULL | | | body | longtext | NO | | NULL | | | timestamp | int(10) unsigned | NO | | NULL | | | reply_to_mid | int(10) unsigned | NO | | 0 | | +--------------+------------------+------+-----+---------+----------------+
om_msg_index
+-----+-----------+-----------+--------+--------+---------+ | mid | thread_id | recipient | author | is_new | deleted | +-----+-----------+-----------+--------+--------+---------+ | 1 | 1 | 1392 | 1211 | 0 | 0 | | 2 | 1 | 1211 | 1392 | 1 | 0 | +-----+-----------+-----------+--------+--------+---------+
om_msg_tags_index
+--------+------+-----------+ | tag_id | uid | thread_id | +--------+------+-----------+ | 1 | 1211 | 1 | | 4 | 1211 | 1 | | 1 | 1392 | 1 | | 4 | 1392 | 1 | +--------+------+-----------+
考虑提供适当的DDL和/或sqlfiddle连同SET – Strawberry