对于提出问题所需的详细信息,我们深表歉意。
有四张桌子(与研究有关,与体育设施无关)。他们如下:
1)假设第一张桌子是网球场的名单,让我们说有数百种可能性(不仅仅是室内和室外)。
-------------
TENNIS_COURTS
ID Type
-------------
1 Indoor
2 Outdoor
…
2)我们想要注意他们一年中的哪一天可以出租。为了防止冗余行,我们可以列出单个日期(例如,一年中的第二天,输入为“从:2”,“到:2”)或块(例如,从第24天到第25天,输入如“从:24”,“到:25”)。在这个例子中,室内球场是最容易获得的,而室外球场只有两个日期范围(冬天显然不切实际)。
---------------------------
DAYS_AVAILABLE
ID ProductID From To
---------------------------
1 1 2 2 《 Indoor
2 2 24 25 《 Outdoor
3 2 140 170 《 Outdoor
4 1 280 300 《 Indoor
5 1 340 345 《 Indoor
…
3)我们还想添加一个属性列表,这些属性会随着时间的推移而增长很长。因此,不是将这些结合到字段规则中,而是存在属性表。
-----------------------
ATTRIBUTES
ID Attribute
-----------------------
1 Age of Player
2 Time of Day
3 Outside Temperature
…
4)最后,我们想要在出租法庭时添加一系列考虑因素(或因素)。在这个例子中,受伤的风险适用于室内和室外场地,但能见度和温度仅适用于室外。
--------------------------------------------------
CONSIDERATIONS
ID ProductID AttributeID Effect Link
--------------------------------------------------
1 1 1 Risk of injury www… 《 Indoor
2 2 1 Risk of injury www… 《 Outdoor
3 2 2 Hard to see www… 《 Outdoor
4 2 3 Gets cold www… 《 Outdoor
…
利用上面的各个表格,我们想要创建一个统一保存的视图,该视图包含该范围内每个日期的至少一行,从一年的第一天开始(法院可用)到一年的最后一天(法院可用)。我们还想重复列出的每一天的适用注意事项。
根据上面显示的数据,它看起来像这样:
----------------------------------------
CONSOLIDATED VIEW
Day Court Consideration Link
----------------------------------------
2 Indoor 《 from DAYS_AVAILABLE
2 Indoor Risk of injury www… 《 from CONSIDERATIONS
24 Outdoor 《 from DAYS_AVAILABLE
24 Outdoor Risk of injury www… 《 from CONSIDERATIONS
24 Outdoor Hard to see www… 《 from CONSIDERATIONS
24 Outdoor Gets cold www… 《 from CONSIDERATIONS
25 Outdoor 《 from DAYS_AVAILABLE
25 Outdoor Risk of injury www… 《 from CONSIDERATIONS
25 Outdoor Hard to see www… 《 from CONSIDERATIONS
25 Outdoor Gets cold www… 《 from CONSIDERATIONS
…
然后我们可以查询统一视图(例如,“SELECT * FROM CONSOLIDATED_VIEW where Day = 24”)来生成一个简单的输出,如:
Court: Indoor
Available: 24th day
Note: Risk of injury (www…)
Hard to see (www…)
Gets cold (www…)
我们希望从统一视图中生成上面显示的示例,因为一旦存储了数据,它就不会经常更改,并且我们很可能无论如何都不会一次查询一天。 Web客户端更有可能将所有行提取到一个大型阵列中(TBD基于确定总大小),然后将其呈现给用户而无需进一步的服务器交互。
我们是否可以仅使用SQL查询生成CONSLIDATED_TABLE,还是需要执行其他编码(例如,PHP或NodeJS)?
答案 0 :(得分:1)
你问题中真正的问题是:如何获得可用日期列表,以便我可以加入我的其他表并生成输出,对吧?我的意思是,拥有一个日期列表,您需要的就是加入其他表格。
由于您有一个有限的列表(一年中的几天),我建议创建一个包含365(或366)天(1,2,3,...)的单个列的表,并加入它你的其他桌子。该查询的smtg类似于:
SELECT ... -- fields u want
FROM YOUR_NEW_TABLE n
JOIN DAYS_AVAILABLE D on (n.DAY between D.From and D.To)
JOIN ... -- other tables that you need info