看起来并不困难,但是就是一时都写不出来,请各位高手帮忙.
问题是这样的,显示出一个A发给其他用户,以及其他用户发给A的聊天记录,并且把A发给B,以及B发给A的记录合并,然后取出其中最新的一条.也就是说与A所有相关的聊天记录按人来排序,显示最新的一条,并统计总数.

解决方案 »

  1.   

     (不要高估你的汉语表达能力或者我的汉语理解能力)
       建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
       参考一下这个贴子的提问方式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)
       
       这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。   
      

  2.   

    猜不出你的表结构,只能提供你个思路。
    参考下贴中的多种方法http://blog.csdn.net/acmain_chm/article/details/4126306
    [征集]分组取最大N条记录方法征集,及散分....
      

  3.   

    贴建表及插入记录的SQL,及要求结果出来看看
    什么标准排序,详细说明
      

  4.   

    表结构为:
    +-------------+--------------+------+-----+---------+----------------+
    | 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
      

  5.   

    我再解释一下,现在要查用户ID为2030的用户和所有其他用户的聊天纪录,用户可能是发其人,也可能是回复人,所以可能是src_user_id,也可能是des_user_id,比如其和2015的用户的聊天纪录,那么纪录可能是:
    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          同上
      

  6.   

    SELECT A.USER_ID, A.QTY, B.*
      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;
      

  7.   

    很感谢您,虽然按您的写法我并没有得到我想要的结果,但是受到您的启发,我完成了这句sql,所以分数我都给您,再次感谢。我的sql如下:
    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;