我觉得很难解释我想问的问题,所以我创造了一个假设的问题(以临时为例),也许我的问题仍然不是很清楚,但请看一看。如果您需要任何澄清,请告诉我
我想比较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;
假设我只能获得当前的临时星期日,所以我需要每周更新一次这个数据库(每个星期天)
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
.
.
我只想分析两个星期日不超过这个,所以我认为再增加一个列会更有效率,
谢谢:)
答案 0 :(得分:1)
不要在每行中存储查询的所有数据。让数据库为您完成工作。您的数据库结构应该只包含city_id
,date
,temp
。如果你只包括星期天,那没关系。然后你可以使用像
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或任何您想要的。如果您以后决定添加一周的不同日期,则不必更改数据库结构(尽管您需要稍微调整一下您的查询)。最重要的是,在收集新数据时,您不需要查看以前的记录 - 只需添加新记录,并在实际需要时获取前几周的数据。