要区分新旧消息,解决问题的关键是要得到能够分隔新旧消息的关键点。这个关键点就是用户点击显示消息页面时,显示第一条消息的那一点(系统消息一般是按时间顺序显示的)。
  同时,由于数据表中有ID字段,而ID字段又是以时间顺序排列的,新消息的ID总比旧消息的ID要大,所以,我们可以充分利用这个特性,在显示第一条消息时,记下这个ID。算法描述如下:
  RESULT=”SELECT * FROM table WHERE to_id=34123 ORDER BY time DESC” //把SQL结果放入变量RESULT
  MAXID=-1
  WHILE (RESULT) //循环,直到显示完RESULT的内容才结束
      IF (MAXID ==-1) MAXID=RESULT[“ID”] //如果MAXID为-1则赋值
      …… // 显示部分
  MAXID的值可以通过URL、COOKIE或SESSION等方法传递给删除消息的页面,删除消息的SQL描述如下:
  DELETE FROM table WHERE to_id=34123 AND id<=MAXID

解决方案 »

  1.   

    楼主要区别处 “删除所有系统消息”和“删除所有已读消息”的区别删除所有消息的话那么就算新来的没有看也要删掉,删除已读消息则只是删掉所有已经阅读过的消息所以你的库表要增加个read字段来判断是否已经读取过:)
      

  2.   

    刚打开查看系统消息页面时,你可以得到短消息的最大id号或是日期型的或是整型的然后按删除 
    delete from table where to_id=XXX and 短消息id<打开页面得到的最大id号
      

  3.   

    同意楼上的  删除的时候仅仅是删除当前的短信息页面所取得的最大ID  select msg,max(id) as mxid from talbe  delete from table where id<=mxid  就是说,最新增加进来的短信息,虽然ID是最大的,但并不是被阅读的短信息页面中取出的最大的,将不会被删除....