webForumDet fria alternativet

loop med med summering

PHP

9 svar · 301 visningar · startad av mhedda

Medlem sedan feb. 2000385 inlägg
Frågan#1

Hejsan!
Har en liten fundering jag har fastnat på denna kod.

Vad är felet, månad visas bra nu det blir bara ett februari osv. men däremot så summeras inte tidåtgången på samma rara sätt. Vad är felet??
Kan tänka mig att loopen ligger fel, men jag tycker att jag har prövat olika alternativ sen är jag nog ingen värsting på detta, och när man sitter för länge med samma kod så blir man ju helt blind.

Denna info skall läggas ihop och visas.

Namn: Sven-Erik Backman Datum: 2003-12-07
Tid: 5.0 Timmar Projekt: Dynaweb
Namn: Sven-Erik Backman Datum: 2003-07-04
Tid: 2.0 Timmar Projekt: Dynaweb
Namn: Sven-Erik Backman Datum: 2003-07-08
Tid: 2.0 Timmar Projekt: Dynaweb
Namn: Sven-Erik Backman Datum: 2003-02-01
Tid: 10.0 Timmar Projekt: Dynaweb
Namn: Sven-Erik Backman Datum: 2003-02-01
Tid: 2.0 Timmar Projekt: Sveaskog

Detta är min kod:

      <table width="145" border="0" cellspacing="3" cellpadding="0" class='kantlinje' height="50">
        <tr> 
          <td class="blutten" height="18" align="left" valign="top" colspan="3">Timmar/Mån: 
          </td>
        </tr>
        <?
	

$strSQL_month="SELECT Month(cast(datum as datetime)) From tbl_tidrapport WHERE namn='$namn_user' group by month(cast(datum as datetime))";
			$result_month = odbc_exec($conn,$strSQL_month);

		while(odbc_fetch_row($result_month))
		{
		

				$project_month = stripslashes(odbc_result($result_month,1));
				$year = substr($datum,0,4); 
				
	
			  	$strSQL_datum="Select datum From tbl_tidrapport WHERE namn='$namn_user' GROUP BY datum";
				$result_datum=odbc_exec($conn,$strSQL_datum);

					
					while(odbc_fetch_row($result_datum))	  
						{
	
						$datum = stripslashes(odbc_result($result_datum,"datum"));
						$year = substr($datum,0,4);
	 
	
								
								$strSQL_man="SELECT SUM(tid_atgang) From tbl_tidrapport WHERE namn='$namn_user' AND datum='$datum'";
								
								$result_man = odbc_exec($conn,$strSQL_man);

				
								while(odbc_fetch_row($result_man))
								{
									$month_sum = stripslashes(odbc_result($result_man,1));
									
								}
						}

							
		?>
        <tr> 
          <td class="blutt" height="14" align="left" valign="top" width="33"> 
            <?=$year?>
          </td>
          <td class="blutten" height="14" align="left" valign="top" width="40"><span class="blutt">
		  <?=$arrMonth[ $project_month ];?>

            </span></td>
          <td class="blutten" height="14" align="right" valign="top" width="60"><span class="blutt"> 
            <?=$month_sum;?>
            Tim</span></td>
        </tr>
        <?  
	

	}

	?>
      </table>

Det som visas:

Timmar/Mån:
2004 Februari 10.0 Tim
2004 Juli 10.0 Tim
2004 December 10.0 Tim

MVH Hedda

Medlem sedan sep. 2001118 inlägg
#2

Det behövs endast 1 query för att lösa ditt problem.

Jag är inte säker på om allt är korrekt nu, men jag testade det i mySQL och där funkade det iaf. Lösningen bör se ut ungefär så här:

      <table width="145" border="0" cellspacing="3" cellpadding="0" class='kantlinje' height="50">
        <tr> 
          <td class="blutten" height="18" align="left" valign="top" colspan="2">Timmar/Mån: 
          </td>
        </tr>
        <?
    

        $strSQL_list="SELECT DATE_FORMAT(datum, '%Y %M') AS datumet, SUM(tid_atgang) AS summa FROM tbl_tidrapport WHERE namn='$namn_user' GROUP BY datumet";
        $result_list = odbc_exec($conn, $strSQL_list);

        while (odbc_fetch_row($result_list)) {
        
			$datum = odbc_result($result_list, "datumet");
			$summa_timmar = odbc_result($result_list, "summa");
			
			?>
        <tr> 
			<td class="blutten" height="14" align="left" valign="top" width="73">
				<span class="blutt"><?=$datum?></span>
			</td>
			<td class="blutten" height="14" align="right" valign="top" width="60">
				<span class="blutt"><?=$summa_timmar?> Tim</span>
			</td>
        </tr>
		   <?  
    
		}

    ?>
      </table>
Medlem sedan feb. 2000385 inlägg
#3

Helt otroligt bra Hydr0matic
Jag måste lära mig sql språket mycket bättre.
Nu funkar det med denna kod förrutom att jag fick byta ut DATE_FORMAT(datum, '%Y %M') mot Month(cast(datum as datetime)) eftersom jag sitter mot ms-sql med odbc funktion och
DATE_FORMAT(datum, '%Y %M') finns inte att tillgå där..
eftersom jag har en array som visar månadsnamn beroende på index 1, 2 osv..
Nu ska jag bara fixa till år också.

	$strSQL_list="SELECT Month(cast(datum as datetime)) AS datumet, SUM(tid_atgang) AS summa FROM tbl_tidrapport WHERE namn='$namn_user' GROUP BY  month(cast(datum as datetime))";
        			$result_list = odbc_exec($conn, $strSQL_list);

       				 while (odbc_fetch_row($result_list)) {
        
									$project_month = odbc_result($result_list, "datumet");
									$summa_timmar = odbc_result($result_list, "summa");
			
					?>

						//end test

							
		?>
        <tr> 
          <td class="blutt" height="14" align="left" valign="top" width="33"> 
            <?=$year?>
          </td>
          <td class="blutten" height="14" align="left" valign="top" width="40"><span class="blutt">
		  <?=$arrMonth[ $project_month ];?>

            </span></td>
          <td class="blutten" height="14" align="right" valign="top" width="60"><span class="blutt"> 
            <?=$summa_timmar;
				
				//$month_sum;?>
            Tim</span></td>
        </tr>
        <?  
	

	}

	?>
      </table>
Medlem sedan sep. 2001118 inlägg
#4

oki =)

finns CONCAT() ? isf, testa

SELECT CONCAT(Year(cast(datum as datetime)), " ", Month(cast(datum as datetime))) AS datumet

Medlem sedan sep. 2001118 inlägg
#5

Hur du än gör måste du iaf gruppera summorna efter en sammansatt "år-månad"-sträng.... Så vet inte om det där med arrayn är så smidigt. Det måste finnas en funktion i ms som ger månaden som sträng ? samt året.... ?

Medlem sedan feb. 2000385 inlägg
#6

CONCAT() fanns tyvärr inte, men jag löste det så här

					$strSQL_list="SELECT Month(cast(datum as datetime)) AS datumet,  Year(cast(datum as datetime)) AS year, SUM(tid_atgang) AS summa FROM tbl_tidrapport WHERE namn='$namn_user' GROUP BY  month(cast(datum as datetime)),  year(cast(datum as datetime))";

Hade aldrig löste utan din hjälp tusen tack Hydr0matic
--------------------------------------------------------------------

Vad tycker du om att jag har datum som varchar det kanske är väldigt osmart men det var därför jag fick casta om till datetime

Medlem sedan sep. 2001118 inlägg
#7

np =)

datum som varchar ? ja du... jag ser inte poängen med det ? Varför valde du det ?

Medlem sedan feb. 2000385 inlägg
#8

Det var nog bara av farten. Ska tänka på det nästa gång :-}
Kan det bli problem längre fram tror du?
MVH Hedda

Medlem sedan sep. 2001118 inlägg
#9

Nä, blir nog inga problem... Tar bara mer plats i DBn, men det handlar om så lite så det spelar ingen roll.

Medlem sedan feb. 2000385 inlägg
#10

Tack Hydr0matic
för all hjälp den har varit mycket givande..

MedMycketVänligaHälsningarHedda

252 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)
119 ms — ändringar (db)