2012-04-29 65 views
0

我需要有一个包含两部分的查询。 我的意思是两条where子句。将mysql中CSV列的值与更多检查进行比较

到现在我已经达到以下内容,但它这么想的正常工作。

SELECT * from items 
where 
     FIND_IN_SET('3', category_id) 
    AND postcode LIKE 'sw19%' 
order by id 

该查询仅运行第一部分,即FIND_IN_SET()部分。而只是忽略了第二部分,即邮编检查...

我想知道的是有没有这种类型的查询的解决方案。

详情

我想的值从2列比较:

  • 1列是一个csv塔,例如。 1,2,3,4,5

  • 另一个是邮政编码B17 SW19等

表是像下面这样。

 
---+------+-------------+----------+- 
id | item | category_id | postcode | 
---+------+-------------+----------+- 
1 | abc | 1,2,3,4  | SW19  | 
---+------+-------------+----------+- 
2 | def | 3,4,5  | NW6  | 
---+------+-------------+----------+- 
3 | xyz | 6,7,8,9  | SW19  | 
---+------+-------------+----------+- 
4 | ghi | 8,9,10,11 | SW19  | 
---+------+-------------+----------+- 

,如果我要选择其category_id包含'3'一个条目,其邮政编码从'SW'启动时,它会是怎样查询?此

SELECT * FROM tablename1 WHERE category_id LIKE '%,3,%' AND postcode LIKE 'SW%' 
+1

但是你现有的SQL工作正常(它不会返回'id = 2',其中'postcode ='NW6'')!请参阅[我的sqlfiddle](http://sqlfiddle.com/#!2/530df/1) – eggyal 2012-04-29 13:45:12

回答

1

+0

与你在你的问题中有什么不同? – eggyal 2012-04-29 21:50:58

+0

FIND_IN_SET('3',category_id)> 0 – 2013-11-02 07:32:00

0

:)只是简单的查询,我只是发现了它完全解决了我的问题的解决方案,虽然它会帮助别人的未来。

好了,查询是这样的:

Select * from table_name where FIND_IN_SET('3', category_id) >0 AND postcode LIKE 'sw%' 

问候, 邻省。

+0

谢谢@Shahid回答,但此查询给出有趣的结果。如果有更多的条目,它们的csv列中没有'3',并且postcode子句被删除或设置为空/空,它将返回所有记录,无论它的csv列中是否有'3'。他们的解决方案是什么? – 2012-04-29 13:33:59

+0

更新了帖子..现在检查它 – Shahid 2012-05-01 16:56:10

相关问题