【问题标题】:Negative offset in mysql?mysql中的负偏移量?
【发布时间】:2013-07-04 16:05:43
【问题描述】:

我想从表中获取当前 ID,但我使用了这个不起作用的代码

    $query1="SELECT id FROM `login`.`users` LIMIT 2000 OFFSET `id` - 1";
    $result=mysql_query($query1);

如果用户按下提交按钮,那么:

    while($row = mysql_fetch_array($result))
    {
      echo $row['id'];
    }

例如,当前 ID = 15,我想成为 14,所以我输入了负数“-”,这根本不起作用,我找不到解决方案。您有任何解决方法的想法吗?

【问题讨论】:

    标签: mysql offset


    【解决方案1】:

    我发现您的查询至少有 3 个问题:

    • 你有LIMIT 没有ORDER BY。这就像对数据库说:“从表中获取 2000 行,前 2000 行,以您喜欢的任何顺序。”我确定你不希望这样。
    • 在 MySQL 中不能有可变的偏移量和限制。都不是负面的。只有硬编码和正数或零。 (可以使用动态 SQL 绕过硬编码限制,但这里不需要。)
    • 即使您可以,并且以某种方式神奇地按照您的愿望排序获取了行,OFFSET 14 也可能无法让您从 15 开始。惊喜,表中可能缺少IDs

    解决方法是:

    SELECT id 
    FROM login.users 
    WHERE id >= 15                 -- the value you want to start from 
    ORDER BY id ASC                -- the order
    LIMIT 2000                     -- the limit
    OFFSET 0 ;
    

    【讨论】:

      【解决方案2】:

      为什么不颠倒顺序?

      $query1="SELECT id FROM `login`.`users` ORDER BY id DESC LIMIT 2000, 1";
      $result=mysql_query($query1);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多