2013-10-06 42 views
1

我有一個列名稱爲「category」的表格。在PHP中,我使用sql prepare語句來選擇屬於指定類別的所有記錄。我用category =做這個然後添加具有類別值的變量。這工作正常。如何查詢同一查詢中的特定類別或所有類別?

但是,如何在同一查詢中選擇所有類別?

我試過使用null和''作爲類別值,但這並沒有工作。將整個代碼部分複製到另一個查詢可能會創建spagetti代碼,因此我想知道是否有更好的選擇。在那兒?

謝謝!

回答

0

大廈,這將是簡單的使用查詢像

$query = "SELECT * FROM table WHERE category = ? OR 1 = ?;" 

然後通過你的$類別爲第一個參數,1或0作爲第二個參數。如果你通過1,那麼第二項變成1 = 1。這總是如此,所以整個表達總是如此。如果你傳遞0,那麼第二項是1 = 0,這總是假的,但是隻有當category = $category匹配時,整個表達式纔是真的。

這比指定「任何類別」的特殊值0更簡單和更好的風格。

另一種解決方案是建立動態查詢:

$where = array(); 
if ($category) { 
    $where[] = "category = ?"; 
    $params[] = $category; 
} 

... perhaps add more terms to $where conditionally ... 

$query = "SELECT * FROM table"; 
if ($where) { 
    $query .= " WHERE " . implode(" AND ", $where); 
} 
0

假設您有一個自動生成的ID(AUTO_INCREMENT或IDENTITY,取決於您的數據庫引擎),您可以使用類似於以下內容的WHERE子句。

$ query =「SELECT * FROM table WHERE category = $ category OR $ category = 0;」

當您想要「所有類別」時,只需將值0傳遞給您的$ category變量即可。

如果你不想通過爲$類的值,而是希望能夠通過一個空白$類別,你可以$類別設置爲0您構建查詢字符串之前:

$ category =(empty($ category)?「0」:$ category); $ query =「SELECT * FROM table WHERE category = $ category OR $ category = 0;」;

...或者你可以在一行上重寫,如下所示。

$ query =「SELECT * FROM table WHERE category = $ category OR」。 (空($ category)?「0」:$ category)。 「= 0;」在@JamesMarks是什麼產品

+0

我不明白這一點呢。您兩次使用$類別,$ category = 0將選擇不是全部的特定類別。我錯過了什麼? – Arjen

+0

我現在已經明白了,但您的解決方案無法正常工作。 OR部分始終執行。我想要一個特定的類別,如果指定其他所有類別。 – Arjen

+0

如果您不想爲所有類別指定0(零),則可以將查詢修改爲如下所示: $ query =「SELECT * FROM table WHERE category = $ category OR」。 (!empty($ category)?$ category:「0」)。「= 0」; –

相關問題