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/