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
您将不会限制 count
或 sum
,而只会限制 returned 行。因此,如 LIMIT
子句中所述,您的查询将增加 return 行。由于您的查询实际上 return 只包含所有可能的行,因此应用(非零)限制对结果没有影响。
Limit
仅限制一次显示的记录。Count
将 return 编辑所有可能的行
$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
您将不会限制 count
或 sum
,而只会限制 returned 行。因此,如 LIMIT
子句中所述,您的查询将增加 return 行。由于您的查询实际上 return 只包含所有可能的行,因此应用(非零)限制对结果没有影响。
Limit
仅限制一次显示的记录。Count
将 return 编辑所有可能的行