2012-07-19 34 views
0

我有2個字段(例如4)的表mytable的:選擇記錄使用WHERE上逗號分隔條現場

ID Zip_Codes 
=== ========= 
1 60148,60123,61034,61234 
2 60122,61034 

我想用:

$zip = 61034; 
$qry = "Select ID from myTable Where $zip in Zip_Codes"; 

這可能嗎? 是什麼讓它變快? 其他更好的解決方案?

+3

*其他更好的解決方案* = HTTP:// en.wikipedia.org/wiki/Database_normalization - 不要在一個字段中存儲多個值 – ManseUK 2012-07-19 15:50:00

回答

2

這裏不能使用INx IN (1,2)x = 1 OR x = 2的簡寫,它不會讓您在逗號分隔列表內進行搜索。

您可以使用FIND_IN_SET

SELECT ID FROM myTable WHERE FIND_IN_SET(61034, Zip_Codes); 

雖然,你不應該有一排多個值。每個郵政編碼應該有一行。

RowID ID Zip_Code 
===== === ========= 
1  1 60148 
2  1 6
3  1 61034 
4  1 61234 
5  2 60122 
6  2 61034 

RowID將主鍵,您可以添加一個INDEXID。)

然後,你可以簡單地做:

SELECT ID FROM myTable WHERE Zip_Code = 61034 
+0

謝謝。性能很重要。這是好的解決方案,任何更好的解決速度的解決方案。 – user1538401 2012-07-19 15:57:52

+0

@ user1538401:更好的解決方案是在一個字段中不會有多個值。每個郵政編碼都有一行。 – 2012-07-19 15:59:24