从PHP中的SQL查询中过滤掉不需要的结果

时间:2013-02-11 19:54:21

标签: php sql

我有一个返回产品列表的查询。该表不能更改为包含另一列(如二进制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语句更好的方法。对任何想法感兴趣。

3 个答案:

答案 0 :(得分:1)

您可以修改查询以获得类似的内容吗?

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

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

答案 1 :(得分:0)

  1. 如果你可以在数据库中进行复杂的查询,那么这是你最好的选择(比如只选择经常订购的项目)。
  2. 在while内,添加if(!someExclusionFunction($row)) {类型语句,然后将显示逻辑(echo语句)放在那里。然后添加someExclusionFunction以检查行。这样做的好处是它可以将您的排除代码移出显示逻辑。
  3. 鉴于选项2,您可以构建someExclusionFunction来检查平面文件,只包含要排除的产品列表或使用其他任意列表或公式。

    总而言之,如果你能在db查询中做到这一点,那就认真思考。

答案 2 :(得分: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 ...
}