我有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