0

製品のリストを返すクエリがあります。テーブルを変更して別の列 (バイナリなどinclude_in_dropdown) を含めることはできません。このデータを入力しているドロップダウンに含めたくない製品が実際にあると仮定します(たとえば、注文の頻度が低い、またはWebページの注文フォームのユーザーにとって難解すぎて直感的でないため)私が入力しているドロップダウンにそれを含めないためのベストプラクティスの方法は何ですか?

while ($row = mssql_fetch_assoc($result)){
    //a switch with a bunch of cases statically 
    //listing the products I don't want to list
    //switch($row[$col_val]){
          //case: "Outsource"
          //break 1;
          //case: "Shipping"
          //break 1;
     //}

     //some other way that is more maintainable(??)

    echo "<tr>";
    foreach ($column_names as $col_key => $col_val){
        echo "<td>";
        echo $row[$col_val];
        echo "</td>";
    }
    echo "</tr>";
    $count ++;
}

これが信じられないほど非理想的な状況であることはある程度理解しています。これが唯一の方法かもしれませんが、1 マイルもの長さの switch ステートメントよりも優れた方法があるかもしれません。どんなアイデアにも興味があります。

4

3 に答える 3

1

クエリを次のように変更できますか?

where product not in ('Outsource', 'Shipping', . . .)

クエリでフィルタリングを行うことは大きな利点です。. . より高速になり、データベースとアプリケーション間の通信が減少するはずです。

于 2013-02-11T20:07:24.370 に答える
0

列の値に、除外/含めるかどうかを決定できる共通性がない限り、switch ステートメントまたは同等のものが必要になります。in_arrayを使用 すると、もう少しエレガントな場合があります。

$exclude = array(
    "Outsource",
    "Shipping",
    // more options ...
);

while ($row = mssql_fetch_assoc($result)) {
    if (in_array($row['column_name'], $exclude)) {
        continue;
    }

    // add to dropdown ...
}
于 2013-02-11T20:15:46.073 に答える
0
  1. データベースで複雑なクエリを実行できる場合は、それが最善のオプションです (定期的に注文されるアイテムのみを選択するなど)。
  2. while 内にif(!someExclusionFunction($row)) {type ステートメントを追加し、そこに表示ロジック (echo ステートメント) を配置します。次に、 を追加しsomeExclusionFunctionて行をチェックします。これの利点は、除外コードを表示ロジックから移動できることです。

オプション 2 を指定するsomeExclusionFunctionと、除外する製品のリストだけでフラット ファイルをチェックするか、他の任意のリストまたは式を使用するようにビルドできます。

全体として、これを db クエリで実行できるかどうか、よく考えてみてください。

于 2013-02-11T20:11:37.647 に答える