2013-02-11 38 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 ... 
}