Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php][mysq] Przerabianie tablic
calebos
post
Post #1





Grupa: Zarejestrowani
Postów: 104
Pomógł: 3
Dołączył: 22.02.2008

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
webasek
post
Post #2





Grupa: Zarejestrowani
Postów: 274
Pomógł: 35
Dołączył: 18.07.2008
Skąd: Kielce

Ostrzeżenie: (0%)
-----


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. ?>


Ten post edytował webasek 29.07.2008, 10:06:58


--------------------
"Tylko dwie rzeczy są nieskończone: wszechświat oraz ludzka głupota,
choć nie jestem pewien co do tej pierwszej." Albert Einstein

Wirtualny Rynek Predykcyjny
Go to the top of the page
+Quote Post
calebos
post
Post #3





Grupa: Zarejestrowani
Postów: 104
Pomógł: 3
Dołączył: 22.02.2008

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
webasek
post
Post #4





Grupa: Zarejestrowani
Postów: 274
Pomógł: 35
Dołączył: 18.07.2008
Skąd: Kielce

Ostrzeżenie: (0%)
-----


Czy musi być to foreach? I czy możesz napisać zapytanie, którym wyciągasz dane?


--------------------
"Tylko dwie rzeczy są nieskończone: wszechświat oraz ludzka głupota,
choć nie jestem pewien co do tej pierwszej." Albert Einstein

Wirtualny Rynek Predykcyjny
Go to the top of the page
+Quote Post
calebos
post
Post #5





Grupa: Zarejestrowani
Postów: 104
Pomógł: 3
Dołączył: 22.02.2008

Ostrzeżenie: (0%)
-----


  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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 08:42