Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL]Rozbudowane zapytanie do bazy (kilka sum)
Forum PHP.pl > Forum > Przedszkole
wicek
Witam od 3 godzin krążę wkoło rozwiązania i mi umyka ... mam tabele (czynnosc) w której są:
user_id , pod_rodzaj , minuty ,imie,nazwisko,numer_tematu

  1. SELECT SUM(minuty) AS suma FROM czynnosc WHERE numer_tematu='numer_tematu' GROUP BY user_id ORDER BY nazwisko


w ten sposób pobieram sumę minut dla każdego użytkownika , i teraz głowię sie jak rozbudować to zapytanie aby dostać dla każdego użytkownika sumę minut dla pod_rodzaj = Biuro i pod_rodzaj != Biuro

nstępnie za pomocą mysql_fetch_array chciałbym powsadzać sumy w komórki tabeli

Prosze o naprowadzenie lub link do przykładu


Pozdrawiam

Wicek
Damonsson
  1. SELECT
  2. SUM(CASE WHEN pod_rodzaj = 'Biuro' THEN minuty ELSE 0 END) sumaBiuro,
  3. SUM(CASE WHEN pod_rodzaj != 'Biuro' THEN minuty ELSE 0 END) sumaNieBiuro
  4. FROM czynnosc WHERE numer_tematu='numer_tematu' GROUP BY user_id ORDER BY nazwisko AS


Tak?
wicek
Wszystko bangla jak należy smile.gif

dzięki za pomoc ofc +

// NOWE smile.gif

To teraz mam podobny problem nie wiem ile może być pod_rodzaj chciałbym jednym zapytaniem wyciągnąć do nagłówków kolumn nazwy pod_rodzaj później dla każdego usera zsumować minuty poszczególnych pod_rodzaj i wypisać w odpowiednie kolumny.

user_id|pod_rodzaj1|pod_rodzaj2|pod_rodzaj3
3 | 300 | 0 | 0
6 | 0 | 240 | 60


coś w tym stylu , próbuję samemu ale coś mi umyka. Możliwe że się nie da zrobić tego jednym zapytaniem i dlatego mam problem smile.gif

Z góry dzięki za odpowiedź.

Ok udało mi się to w taki sposób rozwiązac niestety nie jest to jedno zapytanie... Jak by ktoś wiedział jak to urpościć chetnie posłucham smile.gif
  1. $test = mysql_query("SELECT user_id,pod_rodzaj,nazwisko,imie
  2. FROM czynnosc
  3. WHERE numer_tematu='$numer_tematu'
  4. ")
  5. or die (mysql_error());
  6. $tab_pod_rodzaj = array();
  7. $tab_user_id = array();
  8. while($r=mysql_fetch_array($test)) {
  9. $tab_pod_rodzaj[]= $r['pod_rodzaj'];
  10. $tab_user_id[$r['nazwisko'].' '.$r['imie']] = $r['user_id'];}
  11. $tab_user_id=array_unique($tab_user_id);
  12. ksort($tab_user_id);
  13. $tab_pod_rodzaj=array_unique($tab_pod_rodzaj);
  14. sort($tab_pod_rodzaj);
  15. foreach($tab_user_id as $dane_user) {
  16. foreach($tab_pod_rodzaj as $dane_rodzaj){
  17. $suma_osoby = mysql_query("SELECT imie,nazwisko,pod_rodzaj,
  18. COALESCE(SUM(minuty),0) suma
  19. FROM czynnosc WHERE numer_tematu='$numer_tematu' AND user_id='$dane_user' AND pod_rodzaj='$dane_rodzaj'
  20. ")
  21. or die (mysql_error());
  22. }
  23. }
  24. $x = count($tab_pod_rodzaj);
  25. echo '<br><br><br>';
  26. echo"<x><table cellpadding=2 border=1>";
  27. echo"<tr align=center valign=middle>";
  28. echo"<td width=200 height=10 rowspan=2>Osoba</td>";
  29. echo'<td colspan='.$x.' width=150 height=10>Rodzaj</td>';
  30. echo"<td width=50 height=10 rowspan=2>Suma Czasu</td>";
  31. echo"<td width=50 height=10 rowspan=2>Udział</td></tr>";
  32. echo"<tr align=center valign=middle>";
  33. foreach($tab_pod_rodzaj as $dane){
  34. echo '<td>'.$dane.'</td>';
  35. }
  36. echo "</tr>";
  37. foreach($tab_user_id as $dane_user=>$dane_id) {
  38. $czas_pracownika=0;
  39. echo '<tr><td>'.$dane_user.'</td>';
  40. foreach($tab_pod_rodzaj as $dane_rodzaj){
  41. $suma_osoby = mysql_query("SELECT imie,nazwisko,pod_rodzaj,
  42. COALESCE(SUM(minuty),0) suma
  43. FROM czynnosc WHERE numer_tematu='$numer_tematu' AND user_id='$dane_id' AND pod_rodzaj='$dane_rodzaj'
  44. ")
  45. or die (mysql_error());
  46. while($r=mysql_fetch_array($suma_osoby)) {
  47. $czas_pracownika = $czas_pracownika+ $r['suma'];
  48. echo '<td align=center valign=middle>'.print_time($r['suma']).'</td>';
  49. }
  50. }
  51. echo '<td>'.print_time($czas_pracownika).'</td>';
  52. $udzial = $czas_pracownika*100/$time_sum2;
  53. $udzial = number_format($udzial, 1,',',' ');
  54. echo '<td align=center valign=middle>'.$udzial.'%</td>';
  55. echo '</tr>';
  56. }
Damonsson
Ale zagadkę wymyśliłeś wink.gif

Spróbuj czegoś takiego, powinno dać dokładnie to czego oczekujesz:
  1. SET @sql = NULL;
  2. SELECT
  3. GROUP_CONCAT(DISTINCT
  4. CONCAT(
  5. 'SUM(case when `pod_rodzaj` = ''',
  6. `pod_rodzaj`,
  7. ''' then minuty END) AS `pod_rodzaj_',
  8. `pod_rodzaj`, '`'
  9. )
  10. ) INTO @sql
  11. FROM czynnosc;
  12. SET @sql = CONCAT('SELECT user_id, ', @sql,'
  13. FROM czynnosc
  14. WHERE numer_tematu="numer_tematu" GROUP BY user_id ORDER BY nazwisko
  15. ');
  16. PREPARE stmt FROM @sql;
  17. EXECUTE stmt;
  18. DEALLOCATE PREPARE stmt;


Pamiętaj, że nie możesz użyć mysql_query bo wykona tylko 1. zapytanie (do pierwszego ; ).

Powinieneś przejść na PDO lub MySQLi wspierające wiele zapytań.

Gdybyś to chciał wykonać rzeczywiście jednym zapytaniem i użyć mysql_query, to jest to niemożliwe, jakby co. Albo ja się na tyle nie znam, też jest taka możliwość.
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.