我有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";
這可能嗎? 是什麼讓它變快? 其他更好的解決方案?
我有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";
這可能嗎? 是什麼讓它變快? 其他更好的解決方案?
這裏不能使用IN
。 x 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
將主鍵,您可以添加一個INDEX
到ID
。)
然後,你可以簡單地做:
SELECT ID FROM myTable WHERE Zip_Code = 61034
謝謝。性能很重要。這是好的解決方案,任何更好的解決速度的解決方案。 – user1538401 2012-07-19 15:57:52
@ user1538401:更好的解決方案是在一個字段中不會有多個值。每個郵政編碼都有一行。 – 2012-07-19 15:59:24
*其他更好的解決方案* = HTTP:// en.wikipedia.org/wiki/Database_normalization - 不要在一個字段中存儲多個值 – ManseUK 2012-07-19 15:50:00