【问题标题】:How can I get the offset of a particular row in MySQL?如何获取 MySQL 中特定行的偏移量?
【发布时间】:2012-01-29 07:12:41
【问题描述】:

我正在尝试创建一个图像数据库,它不会保持一致的 ID 记录。例如,它可能是 1、2、6、7、12,但正如您所见,它只有 5 行。 在表里面我有文件标识和文件名。我创建了一个 PHP 脚本来在我提供文件 ID 时向我显示图像。但是,如果我给它不存在的 ID 5,我会得到一个错误。这很好,因为我想要一个错误,但对于将使用前进和后退按钮浏览这些图像的用户来说不是。前进和后退按钮需要检索给定 ID 之后的真实文件 ID。希望这是有道理的。

这就是我想象的代码的样子:

SELECT offset( WHERE fileid=4 )

这会给我 fileid 等于 4 的行的偏移​​量。我认为这很容易理解。我需要这个的原因是为了创建前进和后退按钮。所以我计划从偏移量中加 1 或取 1,这给了我新的 ID 和新的文件名。这样用户浏览时会自动跳过死ID值,但输入假ID时会报错。

【问题讨论】:

  • 你到处都能看到这样的“错误”,即使在 stackoverflow 上,分页也不能完美地“工作”。

标签: php mysql where offset


【解决方案1】:

上升:

SELECT * FROM table WHERE id > 'your_current_id' ORDER BY id LIMIT 1;

往下走:

SELECT * FROM table WHERE id < 'your_current_id' ORDER BY id DESC LIMIT 1;

ps: LIMIT 最好设为2,这样当只返回一条记录时,你可以看到你在数据库的第一条或最后一条记录。

【讨论】:

    【解决方案2】:

    如果您的结果按 x 升序排序,则以下将为您在表中的当前偏移量:

    SELECT COUNT(*) FROM tablename WHERE x < x_of_your_current_item;
    

    如果您只想选择下一行或上一行,您可以通过直接选择一行来跳过两次查询:

    SELECT * FROM tablename WHERE x > x_of_your_current_item ORDER BY x LIMIT 1;
    

    会给你下一个项目(同样&lt; 并将DESC 添加到 order-by 会给你上一个)。

    【讨论】:

    • 我用这种方式来检查该行在哪个页面上(例如,如果分页是每页10)
    【解决方案3】:

    您可以使用偏移量。最初将偏移量设置为零。 第一次您的查询将是 SELECT * FROM TABLE order by table_id LIMIT 0,1

    然后下一个 SELECT * FROM TABLE order by table_id LIMIT 1,1 .. 等等

    这样可以得到从头到尾的记录。

    现在关于后退和前进按钮。

    • 后退按钮:第一次或当偏移量为零时禁用后退按钮

    • 前进按钮: 当您查询当前记录时,您也会检查下一条记录 即在此查询之后 SELECT * FROM TABLE order by table_id LIMIT 0,1 触发这样的查询 SELECT * FROM TABLE order by table_id LIMIT current_offset+1,1 并检查查询是否产生任何结果 如果它产生结果然后设置一个布尔值 say next = TRUE else next = FALSE;

    使用此布尔值启用或禁用前进按钮。

    点击后退按钮的另一件事是将偏移发送为 current_offset - 1 和前进按钮 current_offset + 1

    我希望这会有所帮助。我刚刚遇到这个并想到了这个解决方案。

    【讨论】:

      【解决方案4】:
      SELECT * FROM table WHERE ... ORDER BY id DESC LIMIT 50,10;
      SELECT * FROM table WHERE ... ORDER BY id DESC LIMIT 60,10;
      SELECT * FROM table WHERE ... ORDER BY id DESC LIMIT 70,10;
      

      【讨论】:

      • 如前所述,如果同时删除图像,则分页会以某种方式“跳跃”,但您无法避免这种情况。
      猜你喜欢
      • 1970-01-01
      • 2019-06-16
      • 2013-08-24
      • 1970-01-01
      • 2015-01-03
      • 1970-01-01
      • 2021-01-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多