聊天列表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)

注意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) )
附:网上有的写法把((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调换位置即可发现此写法是错误的,同时也给各位一个提醒,百度知道里的最佳答案未必是正确的

浙公网安备 33010602011771号