1

我试图在 SQLite3 中为每棵树存储一个开花季节。目前我有“月份”字段,然后我将月份名称存储在该字段中。例如

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" 

结果应该是 Tree1,Tree2,Tree3,Tree5

 "Jan,Feb,Mar"

结果应该是 Tree1,Tree3,Tree5

 "Jan,Feb,Mar,Apr"

结果应该是 Tree5

 "Sep,Oct,Nov,Dec"

结果应该是无

为了获得上述结果,我必须使用哪个 SQL 查询?

谢谢

4

2 回答 2

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
于 2012-09-21T09:35:56.167 回答
2

您可以通过以下方式使用Group_concat

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

查看SQLFIDDLE

于 2012-09-21T09:47:31.213 回答