【问题标题】:limit clause in select count() query is not working as I expectedselect count() 查询中的限制子句未按预期工作
【发布时间】:2015-06-22 21:18:12
【问题描述】:
$query = $this->db->prepare("SELECT COUNT(id) FROM table WHERE id = ? && UNIX_TIMESTAMP(timestamp) > ? LIMIT 10");
                            $query->bindValue(1, $id);
                            $query->bindValue(2, $timestamp);
                            $query->execute();
                            $count = $query->fetchColumn();
                            var_dump($count);

var_dump($count) 显示的数字高于限制子句。选择计数查询中不能限制结果吗?

【问题讨论】:

  • 没有group by 的聚合函数仅返回一行,因此限制在这里没有帮助。但是,您可以提供一些示例数据和预期输出。

标签: php mysql oop pdo


【解决方案1】:

这实际上是您的查询的工作方式,并且是正常行为。使用LIMIT 您将不会限制countsum,而只会限制返回的行。因此,您的查询将返回更多行,如您的 LIMIT 子句中所述。而且由于您的查询实际上只返回所有可能的行,因此应用(非零)限制对结果没有影响。

Limit 只限制一次显示的记录。Count 将返回所有可能的行

【讨论】:

  • 好的,感谢您的澄清,我认为这可能是原因,但找不到任何说明这一点的文档。
【解决方案2】:

这个查询:

SELECT COUNT(id)
FROM table
WHERE id = ? && UNIX_TIMESTAMP(timestamp) > ?
LIMIT 10

只返回一行,因为它是一个没有group by 的聚合查询。 limit 并没有真正使用。

也许你想要这个:

SELECT COUNT(id)
FROM (SELECT t.*
      FROM table t
      WHERE id = ? && UNIX_TIMESTAMP(timestamp) > ?
      LIMIT 10
     ) t;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-13
    • 2021-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    相关资源
    最近更新 更多