这可能不是最佳设计,但我有一个包含三个唯一索引的表(邀请者,被邀请者和事件),时间戳和动作,可能的值为INVITE和ACCEPT。
CREATE TABLE IF NOT EXISTS `events`
(
`inviter` int unsigned NOT NULL,
`invitee` int unsigned NOT NULL,
`event` int unsigned NOT NULL,
`action` int unsigned NOT NULL, -- 1 = invite, 2 = accept
`time_stamp` TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) DEFAULT CHARSET=utf8;
这可能是一个糟糕的设计,因为将INVITE与ACCEPT匹配的方法是找到这三个索引相同且行动的行 - INVITE / ACCEPT。对于邀请者,被邀请者和被邀请者的相同值,可能存在多个ACCEPT。事件;可能也没有接受(但总有一个邀请)。
我想得到
邀请者,被邀请者和被邀请者的任意组合的INVITE / ACCEPT对之间的最短持续时间。事件 - 谁最快接受邀请?
谁花了最长时间接受?
我不知道从哪里开始设计合适的SELECT查询。至少,如果我试图用一个查询来做这件事 - 那可以吗?我可以通过多个查询&一些PHP代码。
我可以看到如何使用
获取INVITE和ACCEPT时间SELECT time_stamp AS ts_invite FROM events WHERE action=1
GROUP BY inviter, invitee, event;
SELECT time_stamp AS ts_accept FROM events WHERE action=2
GROUP BY inviter, invitee, event;
但不是如何获得邀请者,被邀请者和被邀请者的每个组合的时间差异。 event - 我使用JOIN或嵌套的SELECT语句吗?