2014-06-06 21 views
1

我正在構建Web服務腳本。腳本以字符串的形式接收類別的用戶首選項 - 例如1,5,6,8,15 ,.我需要從數據庫表中選擇其類別與用戶選擇的類別相對應的所有記錄。WHERE語句的選擇標準數量未知

我需要SELECT,這將返回在這種情況下的A,D和E記錄。

也許最好的方法是分解字符串,並在每個迭代中爲每個子字符串執行一個循環,查詢的WHERE條件不同。

+++++++++++++++++++++++++++ 
+ id + record1 + category + 
+++++++++++++++++++++++++++ 
+ 1 + A  +  5 + 
+ 2 + B  +  20 + 
+ 3 + C  +  7 + 
+ 4 + D  +  1 + 
+ 5 + E  +  6 + 
+ 6 + F  +  3 + 
+++++++++++++++++++++++++++ 

回答

2

最好的辦法是爆炸的字符串,並生成查詢,看起來像:

select * 
from table t 
where id in (1, 5, 6, 8, 15); 

這將允許查詢使用索引優化id

注意,這是從像條件不同:

where id in (@values) 

在這種情況下,@values將被視爲一個單獨的字符串與1,5,6,8,15的值,並且大概匹配任何行。

正如Juergen指出的那樣,您可以使用find_in_set()來達到此目的。該解決方案無法利用id上的索引。

1
select * from your_table 
where find_in_set(id, @input) > 0 
0

你不顯示這些選擇是如何收集的。我假設你有一個數組,$cats。有了這個,你就可以使用implode()

$sql = "SELECT field FROM table WHERE category = ".implode(" || category = ", $cats);