Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: problem z zapytaniem sql
Forum PHP.pl > Forum > Bazy danych > MySQL
kotek2185
Witam, mam twardy orzech do zgryzienia, otoz próbuje zrobic liste obecnosci generowana na podstawie uzupelnianej tabeli. Tabela ma postac:

id | data | czas_w_h | osoba

1 | 2016-11-21 | 5 | xx
2 | 2016-11-21 | 3 | yy
3 | 2016-11-21 | 5 | zz
4 | 2016-11-21 | 2 | xx
5 | 2016-11-21 | 2 | yy
6 | 2016-11-21 | 2 | zz
7 | 2016-11-22 | 6 | xx
8 | 2016-11-22 | 2 | yy
9 | 2016-11-22 | 6 | zz
10 | 2016-11-23 | 6 | xx
11 | 2016-11-23 | 2 | yy
12 | 2016-11-23 | 8 | zz

Próbuje uzyskać postać:

xx yy zz
2016-11-21 7 5 7
2016-11-22 6 2 6
2016-11-23 6 2 8


Jest w ogóle możliwość wyciągniecia w ten sposób danych zapytaniem by mi grupowalo w pewnym sensie po osobie i sumowalo jednoczesnie godziny z danego dnia dla danej osoby?
kapslokk
  1. SELECT id, DATA, sum(czas_w_h), osoba FROM tabela GROUP BY DATA, osoba;

I pozniej musisz sobie w PHP obrobić te dane, żeby stworzyć taka tablice jak chcesz.
trueblue
  1. SELECT DATA, SUM(IF(osoba='xx',czas_w_h,0)), SUM(IF(osoba='yy',czas_w_h,0)), SUM(IF(osoba='zz',czas_w_h,0)) FROM tabela GROUP BY DATA;
kotek2185
  1. SELECT id, DATA, sum(czas_w_h), osoba FROM tabela GROUP BY DATA, osoba;

wszystko ok, tylko takie zapytanie zwraca mi tablice zgrupowana tylko po dacie, sumuje czas, ale po osobie juz nie grupuje...
kapslokk
Cytat
wszystko ok, tylko takie zapytanie zwraca mi tablice zgrupowana tylko po dacie, sumuje czas, ale po osobie juz nie grupuje...


CODE
mysql> select * from test;
+----+------------+-------+--------+
| id | data | hours | person |
+----+------------+-------+--------+
| 1 | 2016-11-21 | 5 | xx |
| 2 | 2016-11-21 | 3 | yy |
| 3 | 2016-11-21 | 5 | zz |
| 4 | 2016-11-21 | 2 | xx |
| 5 | 2016-11-21 | 2 | yy |
| 6 | 2016-11-21 | 2 | zz |
| 7 | 2016-11-22 | 6 | xx |
| 8 | 2016-11-22 | 2 | yy |
| 9 | 2016-11-22 | 6 | zz |
| 10 | 2016-11-23 | 6 | xx |
| 11 | 2016-11-23 | 2 | yy |
| 12 | 2016-11-23 | 8 | zz |
+----+------------+-------+--------+
12 rows in set (0.00 sec)


CODE
mysql> select id, data, sum(hours), person from test group by data, person;
+----+------------+------------+--------+
| id | data | sum(hours) | person |
+----+------------+------------+--------+
| 1 | 2016-11-21 | 7 | xx |
| 2 | 2016-11-21 | 5 | yy |
| 3 | 2016-11-21 | 7 | zz |
| 7 | 2016-11-22 | 6 | xx |
| 8 | 2016-11-22 | 2 | yy |
| 9 | 2016-11-22 | 6 | zz |
| 10 | 2016-11-23 | 6 | xx |
| 11 | 2016-11-23 | 2 | yy |
| 12 | 2016-11-23 | 8 | zz |
+----+------------+------------+--------+
9 rows in set (0.00 sec)


U mnie grupuje. Teraz wystarczy obrobić w PHP i bedzie dokladnie tak jak chcesz
kotek2185
ok racja, moj blad. dziex smile.gif
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.