mysql 同一条SQL语句,执行结果不一样。这是为什么? 255
【已解决】:原因是第一次执行时,变量没定义,导致结果错误。第二次执行,因为第一次执行会自动为变量赋值,所以第二次执行结果正确。【解决方法】:先执行一次变量定义语句,再执行...
【已解决】:原因是第一次执行时,变量没定义,导致结果错误。第二次执行,因为第一次执行会自动为变量赋值,所以第二次执行结果正确。
【解决方法】:先执行一次变量定义语句,再执行查询语句即可。
----------------
如题,同样的一条SQL语句,第一次执行时的结果,和第二次的结果不一样。这条SQL是用来获取分组中,每组的前几条数据。SQL语句如下:SELECT id,title,created_at,reporter_id,new_rankfrom( SELECT id, title, created_at, reporter_id , IF(@tmp=reporter_id,@rank:=@rank + 1,@rank:=1) as new_rank, @tmp:=reporter_id as tmp from ( SELECT n.id, n.title, n.created_at, rln.reporter_id from news n INNER JOIN reporter_link_news rln on n.id =rln.news_id and rln.reporter_id in (5, 6, 5207) ORDER BY rln.reporter_id, n.created_at desc ) aa) bbWHERE new_rank < 4; 展开
【解决方法】:先执行一次变量定义语句,再执行查询语句即可。
----------------
如题,同样的一条SQL语句,第一次执行时的结果,和第二次的结果不一样。这条SQL是用来获取分组中,每组的前几条数据。SQL语句如下:SELECT id,title,created_at,reporter_id,new_rankfrom( SELECT id, title, created_at, reporter_id , IF(@tmp=reporter_id,@rank:=@rank + 1,@rank:=1) as new_rank, @tmp:=reporter_id as tmp from ( SELECT n.id, n.title, n.created_at, rln.reporter_id from news n INNER JOIN reporter_link_news rln on n.id =rln.news_id and rln.reporter_id in (5, 6, 5207) ORDER BY rln.reporter_id, n.created_at desc ) aa) bbWHERE new_rank < 4; 展开
4个回答
展开全部
条件只是new_rank < 4
new_rank 则是@rank这个变量生成的。
逻辑是根据@rank:=reporter_id是否跟上次相同,如果跟上次不同则执行 @rank:=1这个赋值中导致@rank等于1。然后相同执行@rank:=@rank+1。reporter_id出现4次@rank大于3后不显示。
图1执行的时候没定义类型,所以@tmp还存在最后一行查询的值并且字段类型变成了字符串。导致if条件判断为“非”,无脑触发 @rank:=1导致全部值都等于1
图2是正常的。
new_rank 则是@rank这个变量生成的。
逻辑是根据@rank:=reporter_id是否跟上次相同,如果跟上次不同则执行 @rank:=1这个赋值中导致@rank等于1。然后相同执行@rank:=@rank+1。reporter_id出现4次@rank大于3后不显示。
图1执行的时候没定义类型,所以@tmp还存在最后一行查询的值并且字段类型变成了字符串。导致if条件判断为“非”,无脑触发 @rank:=1导致全部值都等于1
图2是正常的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
@temp和@rank 在最里层 红色那部分 需要重新赋值一下,在select后边 加上 (select @temp:=0),(select @rank:=0)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
那说明你的程序在执行的过程中有SQL语句有改动 ,要么你的程序链接数据库不一致,启动BUG模式跟踪一下就知道了
追问
并没有改,SQL语句写好后,就点了两次执行按钮,其他都没动。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询