MySQL在PHP中查询

时间:2011-09-18 14:05:20

标签: php mysql

两个快速(我希望!)问题:

计算行数

在SQL查询中使用COUNT(id)或仅选择所有行并在返回的资源上使用PHP的mysql_num_rows()函数是否更有效?这取决于结果查询的大小吗?是否有一种相当简单的方法来确定这个问题的答案?

结果数组

目前,我在查询中使用COUNT(id),然后明显使用mysql_query()mysql_fetch_array(),如下所示:

$sql = "SELECT COUNT(id) FROM TABLE1;";
$resource = mysql_query($sql) or die(mysql_error())
$result = mysql_fetch_array($resource);
$count = $result[0];

这会返回行数。但是,我很惊讶

$count = mysql_fetch_array($resource)[0];

不起作用;我收到错误:

Parse error: syntax error, unexpected '[' in C:\ServerDocs\file1.php on line 44 

是否有一个简单的解释是什么发生?

提前致谢,
克里斯

2 个答案:

答案 0 :(得分:0)

1)mysql_query获取所有结果,并对结果进行计数。因此,性能与结果数量有关。如果你计算(*)它是一个DB选择,它只产生一行/列。在这种情况下,数据库会为您完成所有操作,通常认为这更好。

2)$count = mysql_fetch_array($count)[0];是不可能的。执行以下操作:

$count = mysql_fetch_array($count);
echo $count[0];

答案 1 :(得分:0)

  1. 这取决于具体情况,但SELECT COUNT(*)通常更快。 原因很简单,就是使用数据库mysql_num_rows() 服务器必须实际构建结果集。使用COUNT(*),在 另一方面,DB可能只能确定行数 来自索引,这要快得多。所以如果你想要的只是计数, 那么mysql_num_rows()最终会为此做更多的工作 结果

    另一个缺点是mysql_num_rows无效 无缓冲的查询。所以如果你需要处理非常大的结果 设置,使用mysql_num_rows可能不是一个选项。但是,COUNT(*) 始终可用。

  2. $count = mysql_fetch_array($resource)[0];

    这种类型的语句在当前版本的php中是不可能的。  所以,最好使用

    $no_of_rows = mysql_fetch_array($count);
    echo $no_of_rows[0];