Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][mysq] Przerabianie tablic
Forum PHP.pl > Forum > Przedszkole
calebos
Czesc jak przerobic wynik z bazy danych ktory mniej wiecej wyglada tak:
data | login | sum(czas)

Tak aby html wygladal mniej wiecej tak

- | login1 | login2 | login3 | loginN..
21.07 | sum1 | sum2 | sum3 | sumN
22.07 |sum..
23.07 |sum...

Wymotalem cos takiego
  1. <?php
  2. $logins=array();
  3. $data=array();
  4. $id=0;
  5. while($row=mysql_fetch_array($result,MYSQL_ASSOC)){
  6. foreach($days as $day)
  7. {
  8. $sqldate=date("Y-m-d",mktime(0,0,0,$m,$day,$Y));
  9. if($sqldate==$row['data'])
  10. {
  11. $logins[$row['login']]=$row['osoba'];
  12. $data[$sqldate][$row['login']]=array(
  13. 'timestamp' => $row['timestamp'],
  14. 'data' => $row['data'],
  15. 'login' => $row['login'],
  16. 'czas'=> timeformat($row['sum(czas_h)'],$row['sum(czas_m)'])
  17. );
  18. $id++;
  19. }
  20.  
  21. }
  22. }
  23. }
  24. //echo '<tr><th>'.$login.'</th></tr>';
  25.  
  26. foreach($data as $element => $item)
  27. { 
  28. //echo $element;
  29.  
  30. echo '<tr>';
  31. echo '<td>';
  32. echo $element;
  33. echo '</td>';
  34.  
  35. foreach ($item as $login => $osoba)
  36. {
  37. //echo '<td>';
  38. //echo $osoba['login'];
  39. //echo '</td>';
  40.  // echo $osoba['login'];
  41. echo '<td>';
  42. echo $osoba['czas'].$osoba['login'];
  43. if ($osoba['czas']='') echo 'Unsp';
  44. echo '</td>';
  45.  
  46. }
  47. echo '</tr>';
  48. }
  49. ?>


Prawie ze mi sie udalo tylko ze dane nie trafiaja nadal tam gdzie powinny tzn sumy dla drugiego loginu sa w pierwszej kolumnie itp.
Moze jakos inaczej powinienem zapytac mysql o te dane ? Troche sie zakrecilem z tymi tablicami.
webasek
Tu jest pierwszy błąd:
NIE
  1. <?php
  2. if ($osoba['czas']='') echo 'Unsp';
  3. ?>


TAK

  1. <?php
  2. if ($osoba['czas']=='') echo 'Unsp';
  3. ?>


Po za tym to:

  1. <?php
  2. echo '<td>';
  3. echo $osoba['czas'].$osoba['login'];
  4. if ($osoba['czas']='') echo 'Unsp';
  5. echo '</td>';
  6. ?>


Powinno raczej wyglądać tak :

  1. <?php
  2. echo '<td>';
  3.  
  4. if ($osoba['czas']=='') {echo 'Unsp';}
  5.  else {echo $osoba['czas'].$osoba['login'];}
  6. echo '</td>';
  7. ?>
calebos
Sry ale wyslalem kod w ktorym wlasnie domieszalem to scalanie stringow ale tym chcialem jedynie upewnic sie ze w kolumnie mam danie nie TYLKO jednej osoby ale kilku.

Thx za ten pierwszy blad.

Popatrz bardziej prosze na logike tych petli czy ja to dobrze robie bo wydaje mi sie ze nie
w tablicy jest [data] potem [login] a w loginie napchane sa daty tez jako tablica.
Wkurzajace jest to ze nie mozna druknac jednej kolumny w html bez zakanczania wiersa.
webasek
Czy musi być to foreach? I czy możesz napisać zapytanie, którym wyciągasz dane?
calebos
  1. <?php
  2. $query="select timestamp,data,login,sum(czas_h),sum(czas_m),concat(imie,' ',nazwisko) as osoba from listazadan left join users using (pid) where family='$familyid' group by login,data order by data";
  3. ?>


Nie nie musi kombijuje tylko jak to pokazac w tabelce. Inaczej 'przewymiarowac' wynik z query do htmlowej tablicy z powtorzeniami





Self solved:

Dodalem wczesniej do 2 roznych tablic daty i loginy ktore beda w tablicy html'owej
Potem przeciagnalem to po tablicy z danymi z sql'a w ten sposob
  1. <?php
  2. echo '<th>Dzien</th>';
  3. foreach($logins as $log => $loginy)
  4. {
  5. echo '<th>'.$loginy.'</th>';
  6. }
  7.  
  8. foreach($daty as $dzien => $dni)
  9. {
  10. echo '<tr>';
  11. echo "<td>".$dzien.$dni.'</td>';
  12. foreach($logins as $log => $loginy)
  13. {
  14. if($data[$dzien][$loginy]=='')
  15. {echo "<td bgcolor='green' align='center'>-</td>" ;}
  16. else{
  17. echo '<td>'.$data[$dzien][$loginy].'</td>';
  18. }
  19. }
  20. echo '</tr>';
  21. }
  22. ?>


Pewnie daloby sie to zrobic lepiej i byloby fajnie gdyby ktos pokazal przyklad.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.