查詢聊天列表,並返回最後一條聊天記錄。這個有一個比較尷尬的點就是,一個是你主動發出的,一個是你接收的。
因此這個SQL會比較長長長長長長長長長長長長長長長長長長長長長長長長長長長長長長長長長長長長長長長長長!sql
查詢出本身發的消息而後聯合查詢接收到的消息,這裏要提下union的特性,就是兩個合併的查詢語句ui
字段數量必須一致
!字段順序必須一致
!數據類型也要類似
!SELECT `uid`,`nickname`,`avatar`,`content`,`time` FROM ( SELECT * FROM ( SELECT toid as uid,`content`,`time` FROM `chat_log` WHERE ( fromid =1 ) UNION SELECT fromid as uid,content,time FROM chat_log WHERE toid = 1 ) `tmp` GROUP BY tmp.uid ORDER BY `tmp`.`time` ) `t` LEFT JOIN `chat_user` `u` ON `t`.`uid`=`u`.`id`
整理思路也很簡單,就是先進行**兩次**sql語句的構造
,而後用左鏈接查詢.code
$sub = Db::name('log') ->field('toid as uid, content, time') ->where('fromid ='.$fromid) ->union('SELECT fromid as uid,content,time FROM chat_log WHERE toid = '.$fromid) ->buildSql(); $query = Db::table($sub) ->alias('tmp') ->group('tmp.uid') ->order('tmp.time') ->buildSql(); $info = DB::table($query) ->alias('t') ->field('uid,nickname,avatar,content,time') ->join('chat_user u', 't.uid=u.id', 'LEFT') ->select();
{ "status": true, "msg": "請求成功", "data": [ { "uid": 2, "nickname": "立冬", "avatar": "https://ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it/u=3667616433,706958275&fm=26&gp=0.jpg", "content": "1553187007", "time": 1553187000 }, { "uid": 3, "nickname": "立春", "avatar": "https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=3962805517,413692801&fm=26&gp=0.jpg", "content": "立春姐姐", "time": 1553187001 }, { "uid": 4, "nickname": "立夏", "avatar": "https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=153106697,274998536&fm=26&gp=0.jpg", "content": "立夏姐姐", "time": 1553187002 }, { "uid": 5, "nickname": "小雨", "avatar": "https://ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it/u=412473880,1796535308&fm=26&gp=0.jpg", "content": "小雨妹妹", "time": 1553187022 } ] }