当前位置: 首页 > 面试题库 >

使用LIMIT时SQL计数总行数

冯庆
2023-03-14
问题内容

我正在尝试创建一个简单的图像库,每页显示16张图像。我使用LIMIT
16在页面上显示正确的数量,但是如果行数超过16,我想在底部显示链接,以允许用户导航到下一页。

我知道我可以通过删除限制并简单地使用循环来显示前16个项目来达到期望的结果,但是这样效率很低。显然,COUNTING行数总是= 16。

$sql .= "posts p, images im, postimages pi WHERE
    i.active = 1 
    AND pi.post_id = p.id
    AND pi.image_id = im.image_id 
    ORDER BY created_at LIMIT 16";

有人可以建议一种更有效的方法吗?

谢谢


问题答案:

除了要获取其他人都提到的计数的单独查询之外,您还需要抵消给定页面上的结果。

$sql .= "posts p, images im, postimages pi WHERE
    i.active = 1 
    AND pi.post_id = p.id
    AND pi.image_id = im.image_id 
    ORDER BY created_at 
    LIMIT ". ($page - 1) * $pagesize .", ". $pagesize;

有关SQL注入的常规警告将在此处适用。



 类似资料:
  • 问题内容: 假设我的MySQL DB中的表包含大量条目。 我需要遍历所有用户,但是我想一次仅执行大块操作(即使用和): 是否有可能知道查询中匹配的用户总数,但仅返回LIMIT个用户? 换句话说,是否可以在不进行单独查询的情况下提前知道用户总数? 问题答案: 您可以使用和在(几乎)一个查询中进行操作: 尽管您仍然有两个结果集,但实际查询仅执行一次,从而避免了重复编码和可能浪费的CPU周期。

  • 问题内容: 出于分页目的,我需要使用和子句运行查询。但是我还需要计算不带and子句的查询将返回的行数。 我要跑步: 和: 同时。有没有办法做到这一点,特别是让Postgres优化它的方法,使其比单独运行它们都快? 问题答案: 是的。 具有简单的窗口功能: 请注意,成本将比没有总数大得多,但通常仍比两个单独的查询便宜。Postgres必须实际上以任何一种方式对 所有行 进行 计数 ,这取决于符合条件

  • 问题内容: 我有一个简单的表,其中包含一些虚拟数据设置: 我可以通过执行以下sql(MSSQL 2008)语句来选择运行总计: 这将给我如下结果: 现在可以只为每个用户检索最新的行吗?因此结果将是: 我要这样做正确吗?任何建议或遵循的新路径都将是很棒的! 问题答案: 试试这个: SQL小提琴演示

  • 问题内容: 例如,我有4000行,并且定义了X限制。 找到X行后查询停止?还是查询找到所有行,然后从找到的行中获取X行? 谢谢你。 问题答案: 从MySQL参考手册: 如果您将LIMIT row_count与ORDER BY一起使用,MySQL会在找到排序结果的前row_count行后立即结束排序,而不是对整个结果进行排序。如果通过使用索引进行排序,这将非常快。如果必须完成文件排序,则必须先选择所

  • 问题内容: 我有一张桌子,上面有日期和交易记录。我需要计算运行总计(用总和划分很容易),除了当“金额”中存在负值时需要将其重置为零,然后再次开始计算运行总计。有任何想法吗? 问题答案: 使用更新变量方法,您可以使用重置选项计算运行总计。

  • 问题内容: 我的表格“订单”中有50行/条目。我有一列名为的列,该列用于保存在处的订单声明。 此字段中的日期格式如下:2011-10-03 07:07:33 格式为(yy / mm / dd time)。 我也有一个专栏,这是他们支付的金额。 我想显示每天的总数。 因此,对于2011年10月3日之后的6个订单,应采用6个订单的值,并将它们加在一起。 所以我可以显示: 我怎样才能做到这一点? 问题答