具体的mysql选择查询
今天我需要你的帮助来得到一个特定的sql select查询。具体的mysql选择查询
我有下表:
和关于特定的ID(在这种情况下ID 1)我想有这样的结果的特定的查询后:
USER_ID(别名对于id_sender/id_recipient),日期(也许是最大的功能,因为我想拥有最新的日期组),邮件(计数功能的消息):
10 | 2012-01-14 09:10:05 | 4
11 | 2012-01-13 13:52:49 | 1
13 | 2012-01-13 20:01:17 | 1
14 | 2012-01-14 09:20:17 | 1
我tryed很多,但没有得到确切的结果 - 所以我的做法是这样的:
SELECT `id_recipient`, `id_sender`, MAX(`date`) AS `date`, COUNT(*) AS `messages` FROM `table` WHERE `id_recipient` = 1 OR `id_sender` = 1 GROUP BY `id_recipient`, `id_sender`
但后来我得到这样的结果:
它不是那么糟糕,但作为你可以看到第四行应该包含在第一行的结果中。 我希望你能找到我。随时询问,如果不清楚。
在此先感谢, 问候
好了,因为我们知道id_recipient值,我们可以用一些数学诱骗到SQL完成这个令人讨厌的查询。
设n是感兴趣的人的id值。
我们知道id_recipient和id_sender的配对总是包含id值为n的用户。基于where子句。
因此,id_recipient + id_sender == n + id_otherPerson为true。
生成的查询与此非常相似。 (它已经有一段时间,但我不认为我有什么语法问题)
SELECT (`id_recipient` + `id_sender` - n) AS `id_otherPerson`,
MAX(`date`) AS `date`, COUNT(*) AS `messages`
FROM `table`
WHERE `id_recipient` = n XOR `id_sender` = n
GROUP BY `id_otherPerson`;
编辑:我把它改成一个XOR,因此,如果人n条消息的人N,也不会造成所有的值都会增加n的消息次数。
这个怎么样?
SELECT user_id, MAX(date), COUNT(*)
FROM (
SELECT id_recipient AS 'user_id', date
FROM table
WHERE id_recipient <> 1 AND id_sender = 1
UNION
SELECT id_sender AS 'user_id', date
FROM table
WHERE id_recipient = 1 AND id_sender <> 1
) AS tbl
GROUP BY user_id
它假定您要使用id_recipient如果id_sender为1,如果id_sender是id_recipient 1
我相信你想应该是如下
10 | 2012-01-13 20:01:17 | 3
11 | 2012-01-13 13:52:49 | 1
13 | 2012-01-13 20:01:17 | 1
我说因为你是混合id_recipient和输出id_sender
他想将1到10之间的任何通信分组。不管1是发送者还是接收者。 14应该包括在内,因为14收到来自1. – JustinDanielson 2012-01-14 09:30:25
的消息好吧...让我检查... – 2012-01-14 09:30:55
justinDanielson是对的 - 我想收集两个用户之间的所有消息,不仅仅是发送或接收的消息。 – user1104419 2012-01-14 09:33:46
1 + 10 - 1 = 10和10 + 1 - 1 = 10 – JustinDanielson 2012-01-14 09:31:15
该死的,从来没有想过这样的 - 这真是一个很好的处理这样一个问题的方式 - 我会记住这个同样的问题! – user1104419 2012-01-14 09:32:30
它完成了工作吗? – JustinDanielson 2012-01-14 09:34:16