2012-03-22 74 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