select count() 查询中的 limit 子句未按预期工作

limit clause in select count() query is not working as I expected

$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) 显示的数字高于限制子句。不能在 select 计数查询中限制结果吗?

这个查询:

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

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

也许你想要这个:

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

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

Limit 仅限制一次显示的记录。Count 将 return 编辑所有可能的行