0

我有一个返回产品列表的查询。该表不能更改为包含另一列(如 binary include_in_dropdown)。假设确实有一些产品我不想包含在我用这些数据填充的下拉列表中(例如,因为它不经常订购,或者对于网页上订购单的用户来说太深奥和不直观)不将其包含在我正在填充的下拉列表中的最佳实践方法是什么?

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 ++;
}

我有点理解这是一个非常不理想的情况,这可能是唯一的方法,但也许有比一英里长的 switch 语句更好的方法。对任何想法感兴趣。

4

3 回答 3

1

您可以将查询修改为具有这样的内容吗?

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

在查询中进行过滤是一个很大的优势。. . 它应该更快并减少数据库和应用程序之间的通信。

于 2013-02-11T20:07:24.370 回答
0
  1. 如果您可以在数据库中进行复杂的查询,那是您最好的选择(比如只选择定期订购的项目)。
  2. 在此期间,添加一个if(!someExclusionFunction($row)) {类型语句,然后将您的显示逻辑(回显语句)放在那里。然后添加someExclusionFunction以检查行。这样做的好处是它将您的排除代码移出您的显示逻辑。

给定选项 2,您可以构建someExclusionFunction一个仅包含要排除的产品列表的平面文件,或使用其他任意列表或公式。

总而言之,如果您可以在 db 查询中做到这一点,请认真考虑。

于 2013-02-11T20:11:37.647 回答
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 回答