【问题标题】:how to use LIMIT in query of MS ACCESS如何在 MS ACCESS 查询中使用 LIMIT
【发布时间】:2019-12-04 20:32:08
【问题描述】:

我想用php做一个分页系统 我正在对我的数据库使用访问权限,它不允许我对我选择的请求进行限制。

SELECT * FROM table LIMIT 10,20

我想在我的请求中添加一列,以便我可以拥有具有连续整数的临时 ID,这将允许我在条件之间进行操作

|id_temp | id  | name |
|   1    | 56  | exmp |
|   2    | 180 | exmp |
|   3    | 193 | exmp |
|   4    | 194 | exmp |
|   5    | 363 | exmp |
|   6    | 500 | exmp |

我尝试使用 TOP 作为替代解决方案,但它只允许我选择前 10 名而不是其他人。 然后我取了元素的 ID 以便在它们之间使用,但问题是我的结果中每次都不能有相同的数量。此外,我有一个非常有限的服务器和一个很大的请求,所以我不能使用 not in。

【问题讨论】:

  • 不幸的是,正如您所注意到的,Access 不支持这种语法。我不确定我是否正确理解了这个问题,但我的建议是获取一个 ID 列表,将它们存储在 PHP 中的内存中,然后在 PHP 中管理分页,将接下来的 10 个 ID 传递给 IN 子句您的查询。

标签: sql ms-access select limit


【解决方案1】:

Access 不支持OFFSET,所以你可以做的是这样的一个技巧:

select top 10 * 
from tablename
where id > (select max(id) from (select top 30 id from tablename order by id ))
order by id

它将返回按 id 排序的从第 31 到第 40 的行。
注意:不要在没有ORDER BY 的情况下在sql 中使用TOPLIMIT,因为不能保证结果是您所期望的。
如果你想要那个id_temp 列,你可以像这样得到它:

SELECT 
  ((select count(*) from tablename where id < t.id)+1) AS id_temp, 
  t.*
FROM tablename AS t
ORDER BY t.id;

【讨论】:

    猜你喜欢
    • 2011-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-12
    • 2020-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多