【发布时间】: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