最初和最后一个月之间的月份

时间:2018-12-13 21:56:36

标签: mysql

我有一个mySQL表

customer_id

需要注意的是,如果species - id INT - name LONGTEXT - FloweringInitialMonth INT - FloweringFinalMonth INT FloweringInitialMonth = 13表示该物种全年开花。

是否有任何快速的方法来创建和填充像这样的新关系表:

FloweringFinalMonth = 13

结果将是这样的:

flowering_species
- species_id       INT
- month            INT 

(另请参见:https://imgur.com/a/PZlbBEC

那样我可以查询特定物种的开花月份或特定月份的物种?

我什至不知道如何开始执行此操作,但我想它必须是使用MySQL的一种方法...

任何帮助我都非常感谢,因为我在这里一无所知。

1 个答案:

答案 0 :(得分:1)

要解决此问题,您需要创建一个月数表,然后JOINspecies表中以获取按月开花的物种列表。在我的demo on dbfiddle中,我创建了一个名为VIEW的{​​{1}},然后可以通过flowering_speciesspecies_id进行查询:

month

示例查询:

CREATE VIEW flowering_species AS
SELECT s.id AS species_id, s.name AS name, m.month AS month
FROM (SELECT 1 AS month UNION SELECT 2 UNION SELECT 3 UNION 
      SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION 
      SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION 
      SELECT 10 UNION SELECT 11 UNION SELECT 12) m
JOIN species s ON m.month BETWEEN s.FloweringInitialMonth AND s.FloweringFinalMonth
               OR s.FloweringInitialMonth AND s.FloweringFinalMonth = 13
ORDER BY species_id, month

输出(基于您发布的样本数据以及常年开花的测试物种):

SELECT * FROM flowering_species WHERE month = 6
SELECT * FROM flowering_species WHERE species_id = 20