2013-02-11 37 views
0

我有一个查询返回产品列表。该表不能更改为包含另一列(如二进制include_in_dropdown)。假设确实有一些产品我不想包含在我填充这些数据的下拉列表中(例如,因为它不经常订购,或者对于网页上的订单表单的用户而言太过深奥且不直观)不包含在我填充的下拉列表中的最佳实践方式是什么?从PHP中的sql查询过滤不希望的结果

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

将其过滤到数据库中以开始?除非过滤逻辑会使查询变得如此庞大/丑陋,否则它将无法维护,所以通常不要发送来自db-> php的数据,以便稍后将其丢弃。 – 2013-02-11 19:56:06

+0

@MarcB我会看看这是否是一个选项。也许我可以将其中一个未使用的字段设置为专门针对我的标志。你可以提交这个答案,所以我可以给你支票吗?谢谢! – 1252748 2013-02-11 20:03:52

回答

1

你可以修改查询有类似的东西吗?

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

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

0
  1. 如果你可以在db中做一个复杂的查询,那是你最好的选择(就像只选择定期排序的项目一样)。
  2. 在此期间,添加一个if(!someExclusionFunction($row)) {类型的语句,然后把你的显示逻辑(回声语句)在那里。然后添加someExclusionFunction以检查行。这样做的好处是它将排除代码从显示逻辑中移出。

鉴于选项2,您可以构建您的someExclusionFunction以检查只包含要排除的产品列表的平面文件或使用其他任意列表或公式。

总而言之,如果你可以在数据库查询中做到这一点,真的很难想象。

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 ... 
}