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

发布于 2024-12-08 08:37:22 字数 1432 浏览 0 评论 0原文

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

哆啦不做梦 2024-12-15 08:37:22

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

  1. 从数据库通过网络返回的数据较少
  2. 数据库可以利用索引
  3. 数据库聚合数据的速度更快,因为这就是它们的用途。

仅当您有数据库工具无法轻松处理的非常复杂的计算或业务逻辑,或者使用数据库不能有效执行的逻辑(例如字符串操作)时,使用诸如 PHP 之类的代码才有意义。

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

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

Simple calculations, especially for aggregation type scenarios, should definitely be handled on the database for multiple reasons:

  1. Less data returned over the wire from the database
  2. Database can take advantage of indexing
  3. Database is faster at aggregating data, because that's what they're made for.

Using code such as PHP makes sense only when you have really complex calculations or business logic that are not handled easily by a database tool, or when using logic that databases do not do efficiently, such as string manipulation.

The general rule of thumb is something like this:

  1. Return as little data as absolutely necessary from the database, and apply any logic that reduces the number of rows at the database side.
  2. Work with the data returned to do complex business logic and markup (i.e., HTML) with your coding language.
神爱温柔 2024-12-15 08:37:22

为什么要重写代码? 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']; }
}

我不明白为什么。 ;-)

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

Why would you rewrite code? SUM(somefield) WHERE (condition) gives you exaclty what you need.

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

On the contrary, you suggest to do something like this:

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

$sum = 0;

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

I don't see why. ;-)

And that's pure for the code, indeed more data is being transported in the second case, to name one thing.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文