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;
展开
 我来答
SDMG123
2021-04-09 · TA获得超过6179个赞
知道大有可为答主
回答量:6679
采纳率:79%
帮助的人:664万
展开全部
条件只是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是正常的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
makeL丶味道
2022-03-03
知道答主
回答量:3
采纳率:0%
帮助的人:1609
展开全部
@temp和@rank 在最里层 红色那部分 需要重新赋值一下,在select后边 加上 (select @temp:=0),(select @rank:=0)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友b9b0cbf
2021-11-19
知道答主
回答量:1
采纳率:0%
帮助的人:432
展开全部
有办法只执行一次么
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
愿做你的唯一7377
2020-02-12 · TA获得超过4139个赞
知道大有可为答主
回答量:7946
采纳率:88%
帮助的人:244万
展开全部
那说明你的程序在执行的过程中有SQL语句有改动 ,要么你的程序链接数据库不一致,启动BUG模式跟踪一下就知道了
追问
并没有改,SQL语句写好后,就点了两次执行按钮,其他都没动。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式