select count() 查询中的限制子句未按预期工作
Posted
技术标签:
【中文标题】select count() 查询中的限制子句未按预期工作【英文标题】:limit clause in select count() query is not working as I expected 【发布时间】: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
的聚合函数仅返回一行,因此限制在这里没有帮助。但是,您可以提供一些示例数据和预期输出。
【参考方案1】:
这实际上是您的查询的工作方式,并且是正常行为。使用LIMIT
您将不会限制count
或sum
,而只会限制返回的行。因此,您的查询将返回更多行,如您的 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;
【讨论】:
以上是关于select count() 查询中的限制子句未按预期工作的主要内容,如果未能解决你的问题,请参考以下文章
为啥select 子句中的字段一定要出现在Groupby子句中