2012-03-22 36 views
0

我需要设置一个SELECT查询,该查询将根据列中具有逗号分隔列表的匹配字符串返回行。根据与SQLite的文本匹配选择行

下面是数据的一个例子:

path    title   desc   type  feed_type markets   tags 
IMG_5639.jpg  Malta Title  description  photo  sheetfed tobacco,education gatefolds,accordian 
IMG_5672.jpg  Malta Title  description  conceptual inline  magazine  gatefolds,oversized 
IMG_5689.jpg  Malta Title  description  conceptual digital  non-profit  oversized 
IMG_5691.jpg  Malta Title  description  photo  sheetfed automotive  oversized,obtuse 
IMG_5694.jpg  Malta Title  description  photo  inline  tobacco   postcard,oblong 
IMG_5699.jpg  Malta Title  description  conceptual digital  education  oversized,obtuse 
IMG_5701.jpg  Malta Title  description  conceptual sheetfed service   postcard,oblong 
01.jpg   Barcelona Title  barcelona  conceptual sheetfed service   diecut 
02.jpg   Barcelona Title  barcelona  photo  inline  education  postcard,oblong 
03.jpg   Barcelona Title  barcelona  photo  digital  associations  gatefolds,accordian 
+1

提示:如果这是您的数据库架构,我强烈建议您不要将CSV列表放入列中。这是一个反模式,很难从SQL查询:http://www.slideshare.net/billkarwin/sql-antipatterns-strike-back – 2012-03-22 16:46:34

+0

我试过SELECT * FROM图像WHERE标签LIKE'diecut'AND tags like'长方形“期望获得包含两者的结果。似乎第二个LIKE对我的结果无任何影响。 如果我做一些像标签LIKE'过大,钝'它会得到正确的结果。尽管我希望它恢复原样,但如何使用“钝的,过大的”将不会返回任何结果。 – ChickensDontClap 2012-03-22 19:38:03

+0

@BlueDude - 这是因为当你使用这样的LIKE子句时,它会进行原始文本比较 - 上面的数据中没有任何地方出现'钝,超大'的数据,所以它不会返回任何东西。作为你的单元测试的一部分,你需要做的很好。 – 2012-03-22 19:53:07

回答

0

尝试谷歌搜索有关LIKE子句。

除非用户在其搜索查询中输入逗号,否则逗号分​​隔的位应该无关紧要。

在这种情况下,如果您可以更改数据库架构,我会将您的CSV数据的每一列放入其自己的数据库列中。这将允许您在每个列上单独查询。

+0

谢谢我应该提到我尝试了LIKE子句,但无法获得一次成功搜索多个术语的查询。除非我能很快弄清楚什么,否则我会创建其他表格。 – ChickensDontClap 2012-03-22 19:45:53

2
I think, you should normalized your data properly? A single column should never contain a comma seperated string of names. 
otherwise in most cases you would not get proper output. 
+0

谢谢我现在明白了。我添加了一对额外的表格(tags和image_tags),其中包含所有的标签,所以通过image_tags我可以输入一个image_id和tag_id来关联它们。我试图做一个快速测试,并认为如果我把它全部塞入一张桌子,我可以节省一些时间。 – ChickensDontClap 2012-03-22 19:43:57

+0

是的,一般来说,当你设计模式不喜欢用逗号分隔对象的列。 – Invincible 2012-03-22 23:56:38