同时使用count(*)和mysql_fetch_object()?

时间:2011-11-17 08:49:20

标签: php mysql

我希望计算所有行,同时使用mysql_fetch_object按照惯例列出它们。我以为我会做这样的事情;

$total = mysql_query("SELECT *, COUNT(*) AS totalfound FROM img WHERE state='0'");

但我似乎无法理解如何获取价值 - 我只是在运行时得到表格中的第一项;

while ($record = mysql_fetch_object($total)) { echo $record->id; }

如果我想获得总数,我可以做到这一点;

$result = mysql_fetch_assoc($total);
$count = $result['totalfound'];

......但是我无法得到其余的。我知道我在想错,但似乎无法让它发挥作用。你能帮帮我吗?谢谢!

有一件事我忘了提到:mysql_num_rows太慢了,我想改用count(*)。例如,整个表上的mysql_num_rows占用3到9秒的所有内容,而count(*)总是需要0.6秒,得到相同的结果。

6 个答案:

答案 0 :(得分:6)

count是一个聚合函数,如果不使用group by,则无法选择行和聚合。 MySQL将允许您在没有group by的情况下执行此操作,并将产生不可预测的结果。

只需使用不带count的查询来获取行,并在结果上使用mysql_num_rows()

修改:如果mysql_num_rows()速度很慢,则必须返回大量行。然后,您最好执行两个查询,一个只需select count(*) as numrows ...,另一个用于检索数据。

尝试添加适当的索引,count(*)将在几毫秒内执行。

你真的不希望在一个查询中。然后,每一行都会有一列说明有多少行,这与该行无关。

答案 1 :(得分:3)

为什么不正常列出它们并通过内置函数获取计数?

$result = mysql_query("SELECT * FROM img WHERE state='0'");
$count = mysql_num_rows($result);
while ($row = mysql_fetch_array($result))
{
  //do your thing here
}

编辑以响应您的修改

在正常情况下,只需要Count,Count()会比mysql_num_rows()快得多,因为Count()只返回计数。在您的情况下,既然您想要记录,mysql_num_rows()应该更快。

答案 2 :(得分:2)

如果我理解你的需要,我认为你可以使用:

$result = mysql_query("SELECT * FROM img WHERE state='0'");
$num_rows = mysql_num_rows($result);

使用$result,您可以按照习惯的方式获取所有行,而$num_rows具有从数据库返回的行数。

答案 3 :(得分:2)

除了马克的正确答案,
为什么你不能以同样的方式,echo $record->totalfound;

至于“mysql_num_rows慢” - 它不再是妄想 你刚刚听到了一些,但没有明白这一点。

无论如何,mysql_num_rows本身并不慢 它收集数据行很慢,没有让它们计数。

mysql_num_rows确实比count(*)慢,如果你只需要那个数字,而不是所有的数据

但如果您仍在获取数据, mysql_num_rows正是您所需要的

答案 4 :(得分:1)

使用KISS理论并执行以下操作

while ($record = mysql_fetch_object($total)) {$totalData[] = $record; }
count($totalData) // returns total number of rows

Count

答案 5 :(得分:0)

我亲爱的你不是在听mysql_num_rows

$total = mysql_query("SELECT * FROM img WHERE state='0'");
$total_found=mysql_num_rows($total);