分离逻辑 - 使用典型的LAMP堆栈,PHP或MySQL应该处理这个例子吗?

时间:2011-10-03 15:54:33

标签: php mysql database logic

This问题让我很好奇。

正确答案演示了如何使用MySQL语法在数据库中添加特定范围的值并返回结果。 在日期范围内检索结果并在PHP中计算总数会更好吗?或者应该在适用的地方使用数据库吗?显然,在这个问题中给出的例子,除非我们谈论成千上万的订单,否则这并不重要,但是为了论证......

2 个答案:

答案 0 :(得分:5)

出于多种原因,应该在数据库上处理简单的计算,特别是对于聚合类型的场景:

  1. 从数据库通过电线返回的数据较少
  2. 数据库可以利用索引编制
  3. 数据库在汇总数据方面更快,因为这就是他们的目标。
  4. 使用PHP之类的代码只有当您拥有数据库工具无法轻松处理的非常复杂的计算或业务逻辑时,或者使用数据库无法有效执行的逻辑时(例如字符串操作)才有意义。

    一般的经验法则是这样的:

    1. 从数据库中返回绝对必要的数据,并应用任何减少数据库端行数的逻辑。
    2. 使用您的编码语言处理返回的数据以执行复杂的业务逻辑和标记(即HTML)。

答案 1 :(得分:0)

为什么要重写代码? SUM(somefield) WHERE (condition)为您提供所需的内容。

$rows = mysql_query('SELECT SUM(somefield) AS `sum` FROM table WHERE (condition)');
$row = mysql_fetch_array($rows);
$sum = $row['sum'];

相反,你建议做这样的事情:

$rows = mysql_query('SELECT somefield FROM table WHERE (condition)');

$sum = 0;

while ($row = mysql_fetch_assoc($rows)) {
    $sum += $row['somefield']; }
}

我不明白为什么。 ; - )

这对于代码来说是纯粹的,实际上在第二种情况下传输的数据更多,仅举一例。