【问题标题】:my sql best practice with php for counting rows使用 php 计算行数的 mysql 最佳实践
【发布时间】:2012-08-30 02:42:26
【问题描述】:

1) 计数记录:

//Connect to mysql server
$link = mysql_connect(HOST, USER, PASSWORD);
if(!$link) {
    die('Could not connect to server: ' . mysql_error());
}

//Select database
$db = mysql_select_db(DATABASE);
if(!$db) {
    die("cannot use the database");
}
mysql_set_charset('charset=utf8',$link); 

$query="SELECT `id`FROM `table` WHERE `abc`='123'";
$result=mysql_query($query);               
$count= mysql_num_rows($result);

我正在使用它来计算记录。该表有 500K 记录。计算记录的最佳做法是什么?

2)我是初学者@mysql和php。我错过了上述脚本中的某些内容吗?我想我最后需要关闭mysql连接!

【问题讨论】:

  • 你错过了使用 PDO / mysqli :)
  • 我最近了解到,不应该再使用mysql了。像杰克所说的那样使用 - PDO 和 mysqli。
  • 问题本身是 stackoverflow.com/questions/3796080/… 和其他问题的副本。否则,您只会在 mysqli / PDO 上获得 cmets(正如 Jack 所说,您应该使用这些功能,而不是即将被删除的 mysql 功能)。

标签: php mysql count


【解决方案1】:

当你只需要统计记录时,你应该使用mysql的COUNT()函数,而不是加载所有记录。

$query="SELECT COUNT(*) AS num FROM `table` WHERE `abc`='123'";

其次,使用PDO 代替mysql_ 函数。

【讨论】:

  • 他没有提到 mysqli - 但 mysql_ 已弃用的库
  • 是的,但是要选择一个,PDO 是更好的选择,一天成像需要更换数据库。
  • @xdazz 两者都有其优点。如果有人对 mysql_ 功能非常满意,mysqli_ 很有用,因为更改是微小的。
【解决方案2】:

为什么不让数据库来做 - 一个简单的呢

SELECT COUNT(*) FROM table WHERE abc=123;

【讨论】:

  • @xdazz 他们的答案更好,并且有更多指向好代码的指针
【解决方案3】:

mysql有一个计数功能:

http://dev.mysql.com/doc/refman/5.1/en/counting-rows.html

所以你可以使用:

SELECT COUNT(*) FROM table WHERE abc=123

或任何条件。

【讨论】:

    【解决方案4】:
    $query="SELECT COUNT(id) FROM `table` WHERE `abc`='123'";
    $result = mysql_query($query);
    $count = mysql_fetch_row($result);
    

    这将工作得又快又轻。另外,正如Jack 在上面的 cmets 中所说,您应该使用 MySQLi 或 PDO,因为 PHP 已弃用 MySQL 插件。

    【讨论】:

    • -1。那 mysql_num_rows 将导致所有 500k 行被转移到 PHP-land。 (虽然,对于缓冲结果,它们可能无论如何......但没有理由强迫它。)
    • @Corbin:可以理解。但是第一个代码块是 OP 的,不是我的。我很少容忍使用调用不必要的数据。
    • @Spiritfyre 你的回答做得很好;-)
    • @Spiritfyre Hrmm,看来我可能误解了你的答案?我将其解释为 the following code is accurate, lighter on the server and easier to read 其中“以下代码”表示第一个 sn-p。在我看来,这可以澄清一点。此外,将 mysql_num_rows 用于计算行数的唯一目的对于 500k 行的表是不正确的。那会非常慢。
    • @AdrianCornish...哎呀。我现在看到了。编辑以消除令人尴尬的瑕疵。 :P
    猜你喜欢
    • 2013-07-03
    • 2013-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-03
    • 2021-08-22
    • 2011-06-28
    相关资源
    最近更新 更多