2014-01-22 21 views
0

我正在优化我的SQL语句以使其更快。在SQL语句中将逗号分隔的列表与输入匹配

我有拉链码像

1111逗号分隔的列表,1112,1115,1112等等等等

现在在我的查询我想匹配,如果匹配iput那些邮编1。如果是这样,那么它将返回包含所有这些邮编的对象的ID。

但什么是做到这一点的最好办法,现在即时通讯做

AND (loc.loc_zip LIKE '%".$_REQUEST['zip']."%' 

输入验证将ofcourse增加..但是这仅仅是用于测试。但我已经测试过这个,看起来有点慢。

这是最好的方法吗?

+0

它将返回的一个ID包含所有这些邮编的对象?你不是指任何这些邮政编码吗?另外,如果loc.loc_zip包含的记录数超过每个记录的邮政编码,那么最好的办法是重新设计数据库,以便在应用程序和邮政编码之间建立一对多的关系。 –

回答

3

你应该 '在'

select * from Users where userid in (1,2,3,4,45,6,656) 

编辑使用。 如果邮编是字符,你可以只有当你通过将它们分开使用'

select * from loc where loc.loc_zip in ('1111','1112','1115','1112') 

如果$ _ REQUEST [ '压缩']。有'则 - >

select * from loc where loc.loc_zip in (.$_REQUEST['zip'].) 

如果邮编是诠释你可以使用的第一条语句 裸月中您必须相交列表“”或它不会工作

+0

当然这是诠释,因为字符只是把'23' – RdPC

+0

所以在我的情况下像$ _REQUEST ['zip'] IN loc.loc_zip? – rZaaaa

+0

我的投票将您的声望变为3位数字。你欠我一杯啤酒。 –