我有一个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的一种方法...
任何帮助我都非常感谢,因为我在这里一无所知。
答案 0 :(得分:1)
要解决此问题,您需要创建一个月数表,然后JOIN
到species
表中以获取按月开花的物种列表。在我的demo on dbfiddle中,我创建了一个名为VIEW
的{{1}},然后可以通过flowering_species
或species_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