我觉得既然这样麻烦,不如数据表就设成每个聊友只有一条记录,例如
聊友id   聊天内容    接收id      聊天时间
1001
1002
....
9999然后当用户发送一条记录的时候,就用update语句更新

解决方案 »

  1.   

    那又何必呢?既然不需要记录聊天内容,那又何必把聊天内容记到数据库中呢?直接存为变量不就好了。如果觉得操作起麻烦,建一个heap表,存进去.
      

  2.   

    不是吧,这个要求好奇怪呀,
      {要求只保留每个用户一条最近时间发送的记录} ???????  保留每个 (某用户向另一用户) 所发送的最近一条记录 ??呵呵,
    就你的需求,
    一个语句不太好实现你可以用A:SELECT COUNT(*) FROM tA WHERE id = 1001
    得出某用户总记录数
    然后用
    DELETE FROM tA WHERE id = 1001 ORDER BY 聊天时间 LIMIT 总记录数 - 1B:
    用临时表来实现
      

  3.   

    shuixin13(犬犬(心帆)) ,呵呵。奇怪吧。同意shuixin13(犬犬(心帆)) 的。其实可以不删啊,要用的时候读出最新的一条记录就是了啊。用max和group的不同优先级.SELECT SUBSTRING(CONCAT(聊天时间,聊友id), 19) AS 聊友id,  
    SUBSTRING(CONCAT(聊天时间,聊天内容), 19) AS 聊天内容, 
    SUBSTRING(CONCAT(聊天时间,接收id), 19) AS 接收id,
    聊天时间
    FROM 记录表
    GROUP BY 聊友id ORDER BY 聊天时间.
    大概是这样.具体你自己看看.
    这个帖子也许有帮助.
    http://expert.csdn.net/Expert/topic/2270/2270426.xml?temp=.4643366
      

  4.   

    有这么处理聊天记录的么???
    见的少啊!这样也好说:
    收到消息后,加一条,删一条不就得了。
    INSERT INTO tA() VALUES('',''','','' ).....................SELECT COUNT(*) FROM tA WHERE id = 1001DELETE FROM tA WHERE id = 1001 ORDER BY 聊天时间 LIMIT 总记录数 - 1
      

  5.   

    select sendid, max(time), substring(max(concat(time,receiveid)), 20) as receiveid, substring(max(concat(time,content)),20) as content from msgrecord group by sendidwhite的,给他结不成,他没在csdn回复我.