我有一个返回产品列表的查询。该表不能更改为包含另一列(如二进制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语句更好的方法。对任何想法感兴趣。
答案 0 :(得分:1)
您可以修改查询以获得类似的内容吗?
where product not in ('Outsource', 'Shipping', . . .)
在查询中进行过滤是一个很大的优势。 。 。它应该更快,并减少数据库和应用程序之间的通信。
答案 1 :(得分:0)
if(!someExclusionFunction($row)) {
类型语句,然后将显示逻辑(echo语句)放在那里。然后添加someExclusionFunction
以检查行。这样做的好处是它可以将您的排除代码移出显示逻辑。鉴于选项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 ...
}