看起来并不困难,但是就是一时都写不出来,请各位高手帮忙.
问题是这样的,显示出一个A发给其他用户,以及其他用户发给A的聊天记录,并且把A发给B,以及B发给A的记录合并,然后取出其中最新的一条.也就是说与A所有相关的聊天记录按人来排序,显示最新的一条,并统计总数.
问题是这样的,显示出一个A发给其他用户,以及其他用户发给A的聊天记录,并且把A发给B,以及B发给A的记录合并,然后取出其中最新的一条.也就是说与A所有相关的聊天记录按人来排序,显示最新的一条,并统计总数.
建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html
1. 你的 create table xxx .. 语句
2. 你的 insert into xxx ... 语句
3. 结果是什么样,(并给以简单的算法描述)
4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。
参考下贴中的多种方法http://blog.csdn.net/acmain_chm/article/details/4126306
[征集]分组取最大N条记录方法征集,及散分....
什么标准排序,详细说明
+-------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+----------------+
| id | bigint(20) | NO | PRI | NULL | auto_increment |
| src_user_id | bigint(20) | YES | | NULL | |
| des_user_id | bigint(20) | YES | | NULL | |
| content | varchar(500) | YES | | NULL | |
| date | datetime | YES | | NULL | |
| status | int(11) | YES | | NULL | |
+-------------+--------------+------+-----+---------+----------------+数据库为mysql5.5
1 2030 2015 。。
2 2015 2030 。。
3 2015 2030 。。
这样的3条纪录要合并在一起求和,并显示最新的那条
其他的纪录可能为:
4 2030 2040
5 2068 2030
6 2068 2030
这种没有相互发的情况下,就统计一方数据然后显示最新的一条就行了期望的结果是:
1 2015 3(数量) 与2015最新的那条,无论是发给2015的还是从2015发过来的。
2 2040 1 同上
3 2068 2 同上
FROM (SELECT T.USER_ID, COUNT(*) QTY, MAX(T.ID) ID
FROM (SELECT SRC_USER_ID USER_ID, ID
FROM TEST_TABLE
UNION ALL
SELECT DES_USER_ID USER_ID, ID
FROM TEST_TABLE) T
GROUP BY USER_ID) A,
TEST_TABLE B
WHERE A.ID = B.ID;
select w.user_id,w.id,w.qty,p.content from
(select t.user_id user_id , max(t.id) id , count(*) qty from ((select des_user_id user_id, id, status from message_private where src_user_id = 1377) union (select src_user_id user_id, id, status from message_private where des_user_id = 1377))t group by t.user_id order by status desc)w,message_private p where p.id = w.id;