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 で操作することを選択します。とにかく結果をループすることは間違いないので、両方のタグを同時にエコーしないのはなぜですか?

ただし、それは私の主な理由ではありません。複数のインスタンスに同じデータを使用することになった場合、結果をキャッシュして再利用し、使用要件に従って返されたデータを異なるテンプレートに実装できます (返されたデータがセットにはすべての行にビュー固有のコードがあります)。

また、クエリは、とにかくビューを作成するコードから分離する必要があるため、最終的なマークアップを更新するときは、クエリを見つけるよりも、マークアップを作成している PHP を (他のマークアップと同じファイルで) 変更する方が簡単です。マークアップを変更します。echo '<th>'.$field.'</th>';だけよりもその意図についてもはるかに明確echo $field;です。

結局のところ、個人的な好みによるものですが、MVC 構造と一般的にクリーンで保守可能なコードの優れた実践として、マークアップを PHP で行うことに間違いなく投票します。

TL;DR

  • PHP を使用してください - とにかく、おそらくそれでループするでしょう
  • echo '<th>'.$field.'</th>';より明確な意図を持っている (より読みやすい)echo $field;
  • データを別の場所で使用する場合は、毎回異なるラップされたタグを追加する複数のクエリを作成するのではなく、1 つのクエリをキャッシュして別のマークアップ テンプレートで再利用できます。
  • データベースは、読みやすさのためにデータ検索に任せるのが最善です (したがって、MVC の動き)。このデータは、PHP などのジョブにより適した言語で操作できます。
于 2013-08-19T14:33:33.630 に答える
2

20,000 行を返す場合、おそらくそれらをループする必要があります。その場合、php または MySQL で作業を行う場合のパフォーマンスの違いは最小限です。

MySQL でそれを行うことを支持するのは、データベースがこの種の作業を自明に行うことができ、多くのデータベースが複数のプロセッサを利用して実行を高速化できることです。簡単な場合は、必要な方法で結果を返すことを好みます。

PHP でこれを行うと、データベースから返される文字が少なくなるため、実際にはネットワーク上のパフォーマンスがわずかに向上する可能性があります。これは、アプリケーション側の作業によって相殺されます。

メンテナンスと読みやすさの理由から、データベースで行うことを支持します。データを抽出するためのロジックは、2 箇所ではなく 1 箇所にあり、2 箇所ではなく 1 箇所の言語で表現されています。

于 2013-08-19T14:26:57.260 に答える
1

PHP側でそれを行います-なぜですか? データ層をプレゼンテーション層から分離しておくため。SQL には 1 つのジョブが必要であり、ジョブは 1 つだけです。つまり、生データを照会して取得します。設計されていないことを SQL に実行させ始めた瞬間に、アプリケーションは下り坂になり始め、維持するのが面倒になり始めます。サーバーを意図したとおりに使用し、SQL からデータを取得し、Web サーバー側でデータを整理します (テーブルにドロップするなど)。

于 2013-08-19T14:56:36.467 に答える