最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

mysql过滤两个不同字段的sql语句_MySQL

来源:懂视网 责编:小采 时间:2020-11-09 19:19:47
文档

mysql过滤两个不同字段的sql语句_MySQL

mysql过滤两个不同字段的sql语句_MySQL:众所周知,一般在mysql过滤相同记录时常用的关键字是distinct, group by等关键字,但是怎么过滤两个不同的字段相同的记录呢。以下是问题需求:有一张表chat_history中存在字段id,from_uid,to_uid等字段,其中id为自增id,from_uid为消息的发送方
推荐度:
导读mysql过滤两个不同字段的sql语句_MySQL:众所周知,一般在mysql过滤相同记录时常用的关键字是distinct, group by等关键字,但是怎么过滤两个不同的字段相同的记录呢。以下是问题需求:有一张表chat_history中存在字段id,from_uid,to_uid等字段,其中id为自增id,from_uid为消息的发送方

众所周知,一般在mysql过滤相同记录时常用的关键字是distinct, group by等关键字,但是怎么过滤两个不同的字段相同的记录呢。

以下是问题需求:

有一张表chat_history中存在字段id,from_uid,to_uid等字段,其中id为自增id,from_uid为消息的发送方的uid,to_uid为接收方的uid,现在需要获得某一个uid的最新联系人。

首先的第一个想法就是对from_uid,to_uid进行group by操作然后获得max(id)过滤出from_uid或者to_uid等于目标uid的值。

按照这种想法我们可以获得如下的sql语句

select max(id) as mid,from_uid,to_uid from chat_history where from_uid="xxxxxx" or to_uid = "xxxxxx" group by from_uid, to_uid order by mid.

这时我们查看结果可以很明显的发现一个问题,假设两个相互通信的uid1和uid2,我们通过上面的sql语句获取到两条数据from_uid=uid1,to_uid=uid2和from_uid=uid2,to_uid=uid1。当然这也不是问题,数据我们已经查到了,我们可以通过程序再对结果进行一次合并,我们就可以获得我们希望获得的数据。

在最近联系比较少的情况下,上述的处理方法并没有什么不合适的地方,但是当最近联系人较多时,我们可能会想到使用分页对列表页进行分页。但是上述的做法很明显就已经达不到我们的预期了,我们希望将其整合到一条sql语句中,并且可以使用limit关键字。

通过观察,我们希望过滤诸如from_uid=uid1,to_uid=uid2和from_uid=uid2,to_uid=uid1这样的记录,第一反应就是我们可以在上述的sql语句作为临时表,再在外层加sql语句进行处理,当然这种方法从逻辑上是成立的,但是他是以牺牲效率来实现的,博主个人是比较反感使用中间表的。

通过对上述结果的观察,我们可以获得这样一种信息,uid1,uid2是不是可以作为一个字段进行处理呢,在mysql中存在关键子concat这是对两个字段进行合并操作,但是简单的concat(from_uid,to_uid)还是达不到我们希望的结果,但是mysql提供了逻辑运算,case 操作。

可以将以上sql语句更改如下:

SELECT max( id ) AS mid, from_uid, to_uid, 	CASE to_uid	WHEN 'xxx'	THEN concat( to_uid, from_uid )	ELSE concat( from_uid, to_uid )	END AS to_from_uidFROM chat_historyWHERE to_uid = 'xxx' OR from_uid = 'xxx'GROUP BY to_from_uidORDER BY mid DESCLIMIT 0,20

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文档

mysql过滤两个不同字段的sql语句_MySQL

mysql过滤两个不同字段的sql语句_MySQL:众所周知,一般在mysql过滤相同记录时常用的关键字是distinct, group by等关键字,但是怎么过滤两个不同的字段相同的记录呢。以下是问题需求:有一张表chat_history中存在字段id,from_uid,to_uid等字段,其中id为自增id,from_uid为消息的发送方
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top