我希望计算所有行,同时使用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秒,得到相同的结果。
答案 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
答案 5 :(得分:0)
我亲爱的你不是在听mysql_num_rows
$total = mysql_query("SELECT * FROM img WHERE state='0'");
$total_found=mysql_num_rows($total);