2012-07-19 73 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