2017-11-10 144 views
0

我有一个循环遍历多个日期的行并获取每一天的平均值的过程。它看起来像这样:将WHILE中SELECT语句的所有结果作为一个整体输出

BEGIN 
    DECLARE d_counter int DEFAULT 0; 
    DECLARE d_difference int DEFAULT DATEDIFF(enddate, startdate); 
    IF d_difference > 0 THEN 
      WHILE d_counter <= d_difference DO 
       SELECT id, ROUND(AVG(Temperature), 1) AS 'avgt', ROUND(AVG(Humidity), 1) AS 'avgh', Timestamp FROM 
        (SELECT * FROM temperature_room2 
        WHERE timestamp >= CURRENT_DATE() - INTERVAL d_counter DAY 
        AND timestamp <= CURRENT_DATE() + INTERVAL 1 DAY - INTERVAL d_counter DAY) AS A; 

忽略END的缺失在这里,它不会因为某些原因而复制。

当我运行这个程序的输出将是这样的: enter image description here

所以我有两个问题: 当我尝试在PHP中使用while循环使用$行= $ msqli_fetch_assoc($结果)这仍然有效吗?

第二个问题: 如果不是,我该如何输出结果作为一个'表'?

在此先感谢!

+0

您每天只有1个ID吗?如果不是,这些奇怪的非序列ID从哪里来?这应该全部在每天聚合一个查询中完成,以这种方式进行这种做法是一种触目惊心的事情,尤其是当您添加多余的子查询时。 – JNevill

回答

0

只需在一个简单的查询中做到这一点。我们没有理由有程序,循环,子查询和所有这些其他的废话:

SELECT date(timestamp) datestamp, ROUND(AVG(Temperature), 1) AS 'avgt', ROUND(AVG(Humidity), 1) AS 'avgh' 
FROM temperature_room2 
GROUP BY datestamp; 

我怀疑你的古怪的ID字段只输出从恰好落入一天,因为你这个记录表随机ID正在汇总,但未能将id等非汇总字段包含在GROUP BY中。任何其他的关系型数据库管理系统都会拒绝这个查询,但有一个错误,但是MySQL会给你提供足够的绳索,这样你就可以将自己和组织中的一半挂起来

+0

你真了不起。弄了好几个小时(我对SQL很陌生),这对我有很大的帮助。我现在可能会开始工作。谢谢! – ItsKasper

+0

我很高兴它有帮助。只要尝试将头脑调整为基于集思维而不是程序化思维。很少需要通过循环表或需要在循环内执行sql语句。 – JNevill

0

是的一个PHP while循环或每个循环是你正在寻找。它会显示每行的结果,这里是两个例子。

While循环

if ($result->num_rows > 0) { 
while($row = $result->fetch_assoc()) { // output data of each row 
$var1 = $row['YourDBtableName1']; 
$var2 = $row['YourDBtableName2']; 
$var3 = $row['YourDBtableName3']; 
$var4 = $row['YourDBtableName4']; 
$var5 = $row['YourDBtableName5']; 
$var6 = $row['YourDBtableName6']; 
$var7 = $row['YourDBtableName7']; 
//create your Table or div and echo the results. It will create the table for each row. 
echo $var1; 
echo $var2; 
echo $var3; 
echo $var4; 
echo $var5; 
echo $var6; 
echo $var7;}} 

而且你的foreach循环。

if ($results->num_rows > 0){ 
foreach ($results as $res){ 
$var1 = $res['YourDBtableName1']; 
$var2 = $res['YourDBtableName2']; 
$var3 = $res['YourDBtableName3']; 
$var4 = $res['YourDBtableName4']; 
$var5 = $res['YourDBtableName5']; 
$var6 = $res['YourDBtableName6']; 
$var7 = $res['YourDBtableName7']; 
//create your Table or div and echo the results. It will create the table for each row. 
echo $var1; 
echo $var2; 
echo $var3; 
echo $var4; 
echo $var5; 
echo $var6; 
echo $var7;}} 
+0

你也可以用一些html和css来定制每一行 – Jonny

相关问题