本帖最后由 xxxlxy2008 于 2014-10-09 13:15:36 编辑

解决方案 »

  1.   

    什么地方不懂?
    LEAST语句中@rownum累加
      

  2.   


    我理解中的执行顺序是where->order by.
    按照我的理解,先执行了where语句,将符合条件的都查出来,此时@rownum一直为0,得到全表的数据;然后使用order by再对查出来的数据进行排序...这样的话,得到的应该是排好序的全表数据,这里得到的却只有两条数据...
    所以不太懂...
      

  3.   

    在高性能MYSQL中有解释,变量累计后再执行<=1
      

  4.   

    能再详细点吗?SQL的执行顺序不是where->order by吗?是不是我理解的有问题?
    《高性能MySQL》中的解释是:
      

  5.   

    在ORDER BY中改变变量的值,在WHERE中使用变量的值
    应该是MYSQL的特殊功能吧,一般顺序是WHERE->order by,具体原因要看看MYSQL的源码了
      

  6.   

    LZ提供的语句主要有以下拐点:
    1、SET @
    2、WHERE @
    3、LEAST(@)此段sql一点不复杂,主要体现的是mysql变量的生命周期和sql的执行顺序:
    1、SET 声明的变量,只对当前连接有效
    2、where 和order 的执行先后顺序是先where 后 order
    3、least函数在这里没有实质用途,只是用了给变量赋值所以,此段sql后台的计算逻辑为:
    1、获取变量,=0
    2、query表 ,取出第一条
    3、过滤变量<=1,通过
    4、通过least里面的:=赋值,变量变为1
    5、query表,取出第二条,过滤 ,变量<=1,通过
    6、set变量=2
    7,where过滤不通过,执行结束