这是这个网址
http://mp.weixin.qq.com/s?__biz=MzA5ODM5MDU3MA==&mid=2650861784&idx=1&sn=cb80e88bcac7951897fff6800e238eac&scene=0#wechat_redirectSELECT id
FROM (
   SELECT id, ((@cnt:= @cnt + 1) + $perpage - 1) % $perpage cnt
   FROM news 
   JOIN (SELECT @cnt:= 0)T
   WHERE id < $last_id
   ORDER BY id DESC
   LIMIT $perpage * $buttons
)C
WHERE cnt = 0;我看不懂这个

解决方案 »

  1.   

    一条使用了用户变量的 MySQL 指令
    你哪一块不懂?
      

  2.   

    @cnt:= @cnt + 1) + $perpage - 1) % $perpage cnt   这个@cnt和cnt一样吗,还有WHERE cnt = 0中cnt是@cnt吗
      

  3.   

    @cnt 是用户变量
    cnt 是指派的列名
      

  4.   

    其实相当于这样是吗 
    SELECT id
    FROM (
       SELECT id, ((@cnt:= @cnt + 1) + $perpage - 1) % $perpage AK
       FROM news 
       JOIN (SELECT @cnt:= 0)T
       WHERE id < $last_id
       ORDER BY id DESC
       LIMIT $perpage * $buttons
    )C
    WHERE AK = 0;
      

  5.   

    对啊,cnt 只是定义的列名,可以自定义。
      

  6.   

    那这个 JOIN (SELECT @cnt:= 0)T中SELECT @cnt:= 0选出来的是个什么表,有什么意义
      

  7.   

    这个join有什么意义
      

  8.   

    JOIN出来的什么也没有啊
      

  9.   

    join 这里有用,@cnt:= 0 为初始值。
    (@cnt:= @cnt + 1) 这里累加,这个表达式的值为1,2,3,4,5.... 可以新建一个表测试一下看看那个join的效果
    mysql> select * from test;
    +----+
    | id |
    +----+
    |  1 |
    |  2 |
    |  3 |
    |  4 |
    |  5 |
    +----+
    5 rows in set (0.00 sec)mysql> SELECT id, (@cnt:= @cnt + 1) cnt
        ->    FROM test
        ->    JOIN (SELECT @cnt:= 0)T;
    +----+------+
    | id | cnt  |
    +----+------+
    |  1 |    1 |
    |  2 |    2 |
    |  3 |    3 |
    |  4 |    4 |
    |  5 |    5 |
    +----+------+
    5 rows in set (0.00 sec)
      

  10.   

    join 在这里是为了累加(@cnt:= @cnt + 1) 这里的值,从而影响cnt列的值。
      

  11.   

    那每次不是把@cnt:都初始化为0吗,cnt都应该是1啊  
      

  12.   

    我直接用select @:cnt=0; 
    然后执行SELECT id, (@cnt:= @cnt + 1) cnt  FROM test不也行吗
      

  13.   

    那如果那样写话不是每次join都把@cnt:都初始化为0吗,cnt都应该是1啊