每周更新数据的数据库设计

时间:2017-12-08 05:21:45

标签: mysql database

我觉得很难解释我想问的问题,所以我创造了一个假设的问题(以临时为例),也许我的问题仍然不是很清楚,但请看一看。如果您需要任何澄清,请告诉我

我想比较3周前(星期日)上周日的临时温度和临时温度, 所以它应该显示这样的东西。选择选项中会有两个日期,所以我想在上周日之前的星期日分析临时值,



<select>
 <option> Last  Sunday (2017-12-03) </option>
 <option> Previous Sunday (2017-11-26) </option>
</select>

<h1> Temp on 2017-12-03 </h1>

<p> 24 C </p>


<h1> temp 3 weeks ago (2017-11-12)</h1>

<p> 24.4 C</p>

<h1> Change in temp </h1>

<p> .4 </p>
&#13;
&#13;
&#13;

假设我只能获得当前的临时星期日,所以我需要每周更新一次这个数据库(每个星期天)

city_id    sunday_temp   temp_pre_week1   temp_pre_week2  temp_pre_week3 last_sunday_date  
  1          24.0                24.3              35.2               24.4   2017-12-03            
 1           24.3                35.2               24.4               28.0  2017-11-26               
 2           3.0                 4.0                2.0                6.0  2017-12-03            
 2           4.0                 2.0                6.0                7.0  2017-11-26               
 .
 .
around 2000 rows

我认为另一种选择是将数据保存4周,所以当用户选择上周日之前的星期日时,我可以使用第4周的列, 像这样的东西

city_id    sunday_temp   temp_pre_week1   temp_pre_week2   temp_pre_week3  temp_pre_week4 last_sunday_date  
 1           24.0                24.3              35.2           24.4       28.0              2017-12-03                      
 2           3.0                 4.0                2.0           6.0        7.0               2017-12-03                      
 .
 .

我只想分析两个星期日不超过这个,所以我认为再增加一个列会更有效率,

谢谢:)

1 个答案:

答案 0 :(得分:1)

不要在每行中存储查询的所有数据。让数据库为您完成工作。您的数据库结构应该只包含city_iddatetemp。如果你只包括星期天,那没关系。然后你可以使用像

这样的东西
SELECT `temp`,`date` FROM `citydata` WHERE (`city_id` = 1) and (`date` <= '2017-12-03') ORDER BY `date` DESC LIMIT 4

将检索2017-12-03之前或之前可用于城市1的最后4条记录。如果您有每个星期日的数据,那将获得具体日期(“上周日”)加上前3周。如果您决定要更多 - 只需将LIMIT更改为5或6或任何您想要的。如果您以后决定添加一周的不同日期,则不必更改数据库结构(尽管您需要稍微调整一下您的查询)。最重要的是,在收集新数据时,您不需要查看以前的记录 - 只需添加新记录,并在实际需要时获取前几周的数据。