mysql索引 - mysql 用户的消息查询问题
大家讲道理
大家讲道理 2017-04-17 16:26:17
[MySQL讨论组]
大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(3)
阿神

目的就是想获取1001用户与最新的10个人的最新通信记录就是了.
大体思路:
1、先获取1001用户给哪几个人发消息,各自最后一条id多少
2、获取其他用户给1001用户发的消息,各自用户的最后一条id是多少
3、整合,你要获取的是两个用户之间通信的最后一条id,因此只要把上面两个结果集union all起来,再根据用户id来分组,取最后一条即可

select m.uid,max(m.max_id) maxid from
(
select receiver_id uid,max(message_id) max_id from messages where user_id='1001' group by receiver_id
union all 
select user_id uid,max(message_id) max_id from messages where receiver_id='1001' group by user_id
)m
group by m.uid
order by maxid desc
limit 10;

至于效率的话,当然是建立user_id和receiver_id各自索引

PHPz

你还需要一个时间字段created_at

·SELECT * from messages where user_id = 1001 OR receiver_id = 1001 ORDER BY created_at DESC LIMIT 10;·

给user_id和receiver_id加上唯一索引。效率很高。没问题的。

阿神

大佬邀请,赶紧飞奔过来,恕在下愚昧,读了三遍总算搞清楚了,虽然没写过发消息的,但是我想的方案是要么你在表里在加个区别这条记录是发送还是接收

这样的能用sql取吗?

SELECT 创建时间字段,接收消息字段,user_id,receiver_id FROM messages user_id = 1001 ORDER BY create_time DESC LIMIT 10;· 取出着1001用户最新的前十条信息就可以了,你管它发给谁的你说到底你不就想知道他最新发了多少条消息嘛,这里就是他发给别人的

然后下载最新的 PHP 输出出来,推荐PDO

如果可以的话消息表的数据会很大效率怎样?

user_idreceiver_id 加个索引试试嘛,不知诸位大神还有其他什么更高效的方法没

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号