4

什么会更好?(考虑性能、可维护性、可读性)

伪代码:

SELECT CONCAT('<td>', user_firstname, '</td>') FROM TableA;

或者

$results = SELECT user_firstname FROM TableA
foreach($result as $fname) {
    $row .= '<td>'.$fname.'</td>';
}

我觉得在查询中这样做会更好,因为 PHP 不必循环遍历它(假设 TableA 中有大约 20,000 行)。但我也认为将来看到此代码的人会想知道您为什么要在查询中这样做。

编辑:我问的主要原因是我们在其他地方为这个数据集循环的 php 非常耗费内存。

4

3 回答 3

3

我肯定会选择返回纯数据并使用 PHP 进行操作。毫无疑问,无论如何你都会遍历结果,那么为什么不同时回显两边的标签呢?

然而,这不是我的主要理由 - 如果您最终对多个实例使用相同的数据,您可以缓存和重用结果,根据使用要求将返回的数据实现到不同的模板中(如果返回的数据不可能set 在每一行都有特定于视图的代码)。

此外,查询应该与创建视图的代码分开,因此在更新最终标记时,修改创建标记的 PHP(与其他标记位于同一文件中)比查找查询更容易进行标记更改。echo '<th>'.$field.'</th>';它的意图也比echo $field;.

归根结底,这取决于个人喜好,但随着 MVC 结构和通常干净和可维护的代码的良好实践,我肯定会投票支持在 PHP 中完成标记

TL;博士

  • 使用 PHP - 无论如何你可能会循环使用它
  • echo '<th>'.$field.'</th>';echo $field;
  • 如果要在其他地方使用数据,您可以缓存单个查询以与不同的标记模板一起使用,而不是每次都添加不同的包装标签进行多个查询
  • 数据库最好留给数据检索以提高可读性(因此 MVC 运动),然后可以通过更适合该工作的语言(例如 PHP)来操作这些数据
于 2013-08-19T14:33:33.630 回答
2

如果您要返回 20,000 行,大概您必须遍历它们。如果是这样,在 php 或 MySQL 中进行工作之间的性能差异很小。

赞成在 MySQL 中做这件事的原因是数据库可以轻而易举地完成这类工作,并且许多数据库可以利用多个处理器来使其运行得更快。当这很容易时,我更喜欢以所需的方式返回结果。

支持在 php 中执行此操作的原因是您从数据库中返回的字符更少,因此实际上可能会在网络上获得少量性能。这将被应用程序方面的工作所抵消。

出于维护和可读性的原因,我会在数据库中这样做。提取数据的逻辑在一个地方而不是两个地方,用一种语言而不是两种语言表达。

于 2013-08-19T14:26:57.260 回答
1

在 PHP 端做 - 为什么?使您的数据层与表示层分开。SQL 应该有一份工作,而且只有一份工作。即查询和检索原始数据。你开始让 SQL 做一些它不适合做的事情的那一刻,就是你的应用程序开始走下坡路并开始变得难以维护的那一刻。按预期使用服务器,并从 SQL 中检索数据,在 Web 服务器端对其进行美化(将其放入表等)

于 2013-08-19T14:56:36.467 回答