2017-11-10 7 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

그래서 나는 두 가지 질문이 있습니다 나는 $ 행 = $의 msqli_fetch_assoc ($ 결과)를 PHP에서 while 루프를 사용하려고하면, 아직도 작동할까요?

두 번째 질문 : 아니요, 결과를 하나의 '테이블'로 출력하려면 어떻게합니까?

미리 감사드립니다.

+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에 포함되지 않습니다. 다른 RDBMS는 오류로 인해이 쿼리를 거부하지만 mysql은 많은 로프를 제공하므로 자신과 조직의 절반 정도만 사용할 수 있습니다.

+0

당신은 훌륭합니다. 꽤 많은 시간 동안 (나는 SQL에 대해 매우 익숙하지 않다.)이 작업이 많은 도움이되었다. 아마 지금 일하게 될거야. 감사! – ItsKasper

+0

도움이 된 것을 기쁘게 생각합니다. 절차 중심이 아닌 집합 기반 사고로 머리를 조정하십시오. 테이블을 반복하거나 루프 내에서 SQL 문을 실행할 필요가 거의 없습니다. – JNevill

0

예 php while 루프 또는 각 루프의 a가 찾고있는 것입니다. 여기에 각 행에 대한 결과가 표시됩니다.

루프

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