将WHILE中SELECT语句的所有结果作为一个整体输出

时间:2017-11-10 19:50:06

标签: php sql output mariadb

我有一个循环遍历行的多个日期的过程,并获得每天的平均值。它看起来像这样:

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中使用带有$ row = $ msqli_fetch_assoc($ result)的while循环时,这仍然有效吗?

第二个问题: 如果不是,如何将结果输出为“表”?

提前致谢!

2 个答案:

答案 0 :(得分:0)

只需在简单查询中执行此操作即可。没有理由拥有过程,循环,子查询和所有其他废话:

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

我怀疑你的oddball id字段只是从表中输出一个随机ID,因为你正在聚合但是未能在id中包含GROUP BY这样的非聚合字段。 {1}}。任何其他RDBMS都会因为错误而拒绝这个查询,但是mysql会为你提供足够的绳索,这样你就可以把自己和一半的组织挂起来。

答案 1 :(得分:0)

是的,php循环或每个循环是你正在寻找的。它将显示每行的结果,这是两者的一个例子。

While Loop

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 Loop。

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;}}