2012-09-21 118 views
1

我試圖在SQLite3中爲每個樹存儲一個盛開的季節。目前我有字段「月」,然後我在該字段中存儲月份名稱。例如在SQLite中存儲/查詢多個值

Tree Name  Month 

Tree1   Jan,Feb,Mar 
Tree2   Nov,Dec,Jan 
Tree3   Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec 
Tree4   Mar,Apr,Nov,Dec 
Tree5   Jan,Feb,Mar,Apr 

我不確定這是否是存儲它的最佳方式,任何建議都很感謝。

其次,我需要執行一個查詢,在那裏我輸入的月份,它應該返回我符合搜索條件的樹名。例如

如果我搜索

"Jan" 

結果應該是樹1,Tree2,Tree3,Tree5

"Jan,Feb,Mar" 

結果應該是樹1,Tree3,Tree5

"Jan,Feb,Mar,Apr" 

結果應該是Tree5

"Sep,Oct,Nov,Dec" 

結果應該是沒有

哪些SQL查詢我必須爲了獲得上述結果使用?

謝謝

+0

SQL語言的設計與標準化數據庫更好的工作,所以我建議@Podiluska建議。對於你想要Group_Concat可以幫助你,檢查[這個SO答案](http://stackoverflow.com/questions/9797353/sqlite-group-concat-multiple-columns),它可以是有幫助的,這是什麼你需要但它會幫助你找到正確的道路。但是SQL通常不適合這種字符串操作。 – Yaroslav

回答

2

您可以按以下方式使用Group_concat

SELECT Group_concat(name) AS [tree name] 
FROM tree 
WHERE month LIKE '%Jan,Feb,Mar%' 

退房SQLFIDDLE

+0

謝謝,這個作品 – chmod

+0

@chmod:不客氣 –

3

不,這不是存儲它的最佳方式。

你應該正常化您的數據和存儲每行的月/樹

Tree1   Jan 
Tree1   Feb 
Tree1   Mar 
Tree2   Nov 
Tree2   Dec 
Tree2   Jan 
.... 

(或者也許是幾個月存儲爲數字1-12)

那麼你可以

select treename from TreeBlooming where month = 'jan' 

select treename from TreeBlooming 
where month in ('jan','feb') 
group by treename 
having count(distinct month)=2 
+0

感謝您的建議,但我無法真正改變數據庫的使用方式,因爲我從MSAcces中導入了它 – chmod

+1

然後「我不確定這是否是存儲它的最佳方式,任何建議都很感謝。」你的問題是一個相當好奇的元素? – podiluska