我是靠谱客的博主 天真店员,最近开发中收集的这篇文章主要介绍mysql中为查出来的数据加序号,以及left join序号混乱解决办法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

mysql给查询出来的信息再加一个字段显示序号。

mysql中可以这样写

SELECT
a.id id,
a.client_id clientId,
a.create_time createTime,
a.update_time updateTime,
@y:=@y + 1 AS num
FROM
(SELECT @y:= 0) c,
app_info a


这样写直接在数据库中运行是没有问题的,但是在hibernate中createSQLQuery这样是会报错的。

解决方案是在“:”前面加“\”。

SELECT
a.id id,
a.client_id clientId,
a.create_time createTime,
a.update_time updateTime,
@y\:=@y + 1 AS num
FROM
(SELECT @y\:= 0) c,
app_info a



-------------------------------------------------------------------------------分       割       线----------------------------------------------------------------------


后来发现个问题:单表查的时候没问题,但是如果用left join其它表的话就会出现序号列是乱的情况。其实序号列也是从1到最后,但是顺序是乱的。

以下为遇到问题的语句:

SELECT
a.userid id,
a.username username,
a.reg_time regTime,
@y :=@y + 1 AS num
FROM
(SELECT @y := 0) c,
account_user a
LEFT JOIN app_info p ON a.reg_source = p.client_id
ORDER BY
a.reg_time DESC


这个SQL查出的结果如下:




order by num 查询结果:



至于之所以造成序号乱掉的原因目前还不是很清楚,但解决办法后来偶然间发现了。

解决办法:上面出现问题的SQL语句“account_user a LEFT JOIN app_info p on a.reg_source = p.client_id” 中,为client_id这个字段加一个唯一性约束。

我的client_id字段在写入数据之前会在程序里做一个是否唯一的校验,也就是说这个client_id在数据库中可以保证是没有重复的,但是还是不行,会乱掉,只有为其加一个唯一约束,才可以解决(PS:但是不知道这样解决是否是问题的根本所在,待以后发现,或者高人指点)。


加唯一约束:


alter table app_info add unique (client_id)


------------------------------------------------------分       割       线-------------------------------------------------------------------


参考链接:

http://blog.csdn.net/chentravelling/article/details/47978021

http://blog.csdn.net/guin_guo/article/details/49975431

http://blog.163.com/shu_xiangege/blog/static/186644450201532832452361/

最后

以上就是天真店员为你收集整理的mysql中为查出来的数据加序号,以及left join序号混乱解决办法的全部内容,希望文章能够帮你解决mysql中为查出来的数据加序号,以及left join序号混乱解决办法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(67)

评论列表共有 0 条评论

立即
投稿
返回
顶部