聊天列表SQL写法

在做聊天功能时遇到这个问题,查询了网上得一些写法,现总结如下:

类似聊天如图:

测试表如图:

SQL1:

select * from test  A where not exists
       (select 1 from test  B
       where ((B.send=A.send and B.receive=A.receive)
              or (B.receive=A.send and B.send=A.receive))
              and B.id>A.id)
View Code

注意exists的使用,以及注意and or在SQL中的优先级

SQL2:

         
 select * from test A where id in
          (select MAX(id) from test B where (B.send=A.send and B.receive=A.receive)
              or (B.receive=A.send and B.send=A.receive) )
View Code

附:网上有的写法把((B.send=A.send and B.receive=A.receive)or (B.receive=A.send and B.send=A.receive))替换成unicode(B.send)+unicode(B.receive)=unicode(A.send)+unicode(A.receive),这种写话是错误的,具体原因去看unicode的用法

另外一种错误写法:

当把3,1调换位置即可发现此写法是错误的,同时也给各位一个提醒,百度知道里的最佳答案未必是正确的

 

posted @ 2017-03-19 17:12  简简单单cxf  阅读(366)  评论(0)    收藏  举报