【问题标题】:mysql limit keyword with maximum valuemysql限制关键字的最大值
【发布时间】:2018-03-14 15:12:13
【问题描述】:

我有一个分页系统,我在我的 SQL 查询中使用了一个限制来检索每个页面所需的数据,比如说:

SELECT foo
FROM table
LIMIT :start, 10

:start 值是动态的,以允许页面导航。
现在如果这个值大于总行数,查询显然会返回一个空结果。

我想做的是为 :start 参数设置一种边界,这样它就不会超过总行数,并且最坏的情况是返回最后十个条目。 一种

SELECT foo
FROM table
LIMIT (
   CASE WHEN :start > (
      SELECT COUNT(*)
      FROM table
   ) THEN :limit_value
   ELSE
      :start
   END
), 10

【问题讨论】:

  • 为什么?您将浪费大量时间并降低性能,只是为了涵盖一种罕见的情况,即使发生这种情况,也能按预期工作。你真的认为值得你花时间吗?
  • 因为你愿意有两个查询(你显示的子查询),在得到:start之前,得到:cnt = COUNT(*)并设置`:start = min(:start, :cnt-10) :
  • @Mjh 事实上,这不仅适用于用户故意这样做的情况。由于它是一个应用程序,用户可以对行 (例如删除) 应用操作,因此如果显示最后一页并且用户删除所有行,则应用程序必须显示前一页。我只是想直接在查询中管理显示,而不是在其他地方进行。

标签: mysql max conditional-statements limit


【解决方案1】:

由于您正在动态计算 :start 并愿意进行子查询,因此将记录数预查询为 :cnt 并更改

:start = max(0,min(:start, :cnt-10))

【讨论】:

  • 这是我已经在做的,但我只是想知道是否有办法在我的查询中设置条件 limit
  • 啊,可惜不在 MySQL 上 :-(
猜你喜欢
  • 2019-07-23
  • 2014-10-10
  • 2021-02-21
  • 2017-08-29
  • 2022-08-12
  • 2015-11-05
  • 1970-01-01
  • 1970-01-01
  • 2015-02-06
相关资源
最近更新 更多