![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Przyjaciele php.pl Postów: 1 590 Pomógł: 40 Dołączył: 11.01.2007 Skąd: Centrum Ostrzeżenie: (0%) ![]() ![]() |
Witam.
Mam chyba dość prosty problem, ale nie mogę wymyślić niczego konkretnego. Sytuacja jest taka. Wyciągam z bazy danych wiersze z danymi ( łączonych kilka tabel ) ale wynik zawsze wygląda tak samo ( taka sama ilość pól i takie same typy danych ). Kod [0] => Array ( [id] => 155 [id_user] => 1 [id_job] => 19 [type] => 1 [data] => 1186092000 [jed_proc] => 30 [jed_min] => 3 [pracownik_nazwa] => Admin Admin [dzial_nazwa] => dzial [dzial_id] => dzial [pracownik_id] => 1 [job_nazwa] => projekt [job_number] => number [job_id] => 19 [projekt_nazwa] => cienki_projekt [projekt_id] => 12 [brand_nazwa] => cienki [brand_id] => 14 [klient_nazwa] => cienki [klient_id] => 13 ) Do tego dochodzi druga tablica w której podana jest kolejność kolumn wyświetlanych później. Kod Array ( [0] => klient [1] => brand [2] => projekt [3] => pracownik ) Kolejność kolumn może się zmieniać. I teraz jest problem. Należy zsumować wartości jed_min w przypadku gdy dana kolumna ( dany id odpowiadający wartości z tablicy z kolumnami ) z następnego wiersza jest taka sama. W wyniku chciałbym otrzymać tablicę która pozwoli na wyświetlenie takiego efektu ( dla takiej kolejności kolumn jak podana wyżej ): Kod klient 1 | brand1 | projekt1 | pracownikA | wartosc z jed_min | | | pracownikB| wartosc z jed_min | |suma dla projekt 1 | suma dwoch powyzszych | |projekt2 |pracownikA|wartosc z jed_min | |suma dla projekt 2 | wartosc powyzsza | suma dla brand1 | suma wszystkich powyższych suma dla klient1 |suma wszystkich powyższych . . . i tak dalej i tak dalej. Wiem, że zamotełem trochę, ale jeżeli ktoś się zainteresuje to z chęcią wyjaśnie dokładniej. |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 175 Pomógł: 17 Dołączył: 23.06.2006 Ostrzeżenie: (0%) ![]() ![]() |
no rzeczywiscie troszke zamotane (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
nie lepiej wymyslec odpowiednie zapytanie SQL? odpowiednio utworzone ma mozliwosc grupowania i sumowania wartosci... i to jest lepsze rozwiazanie niz zabawa w tablicach jak mozesz to podaj zapytanie jakiego uzywasz do wyciagania tych danych i troszke inaczej sformuuj ten problem, prosto jak tylko to sie da, a co do tabelki, zrob to w jakims programie i podrzuc screena, bo to sie troche rozwalilo i jest nieczytelne pozdrawiam |
|
|
![]()
Post
#3
|
|
Grupa: Przyjaciele php.pl Postów: 1 590 Pomógł: 40 Dołączył: 11.01.2007 Skąd: Centrum Ostrzeżenie: (0%) ![]() ![]() |
Tak oto wygląda tabelka jak wyświetlę to co dostaje z SQL'a
jest tak a tak ma wyglądać po obrobieniu ma byc tak Mam nadzieje, że to trochę wyjaśni |
|
|
![]()
Post
#4
|
|
Grupa: Moderatorzy Postów: 4 465 Pomógł: 137 Dołączył: 26.03.2004 Skąd: Gorzów Wlkp. ![]() |
Nie jestem pewien, czy dobrze zrozumiełem, ale:\ ty chyba chcesz zsumować wartości pola jed_min dla konkretnego użytkownika.
Czy nie mógłbyś po prostu użyć SUM(jed_min) AS laczna_ilosc WHERE id=$id w zapytaniu? Ewentualnie wyjaśnij bliżej Cytat Należy zsumować wartości jed_min w przypadku gdy dana kolumna ( dany id odpowiadający wartości z tablicy z kolumnami ) z następnego wiersza jest taka sama. Pozdrawiam. |
|
|
![]()
Post
#5
|
|
Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
Hmmm może zrób tak: wyniki z bazy wybieraj posortowane wg pola 'klient'. Wtedy będziesz miał dane nie pomieszane pod względem klienta. W PHP w pętli lecisz po wszystkich rekordach wyciągniętych przez zapytanie. Tworzysz jakąś zmienna tymczasową np. $lastClient która przetrzymuje nazwę ostatnio iterowanego klienta. Równocześnie ustawiasz zmienna $sum która sumuje liczby z pola $suma. Jeśli aktualna nazwa jest różna od $lastClient to znaczy, że masz wyświetlić policzoną $sumę, następnie ją wyzerować no i zmienić wartość $lastClient. Jeśli nazwa ta jest równa $lastClient to wyświetlasz wiersz dla rekordu (bez nazwy klienta) i dodajesz do zmiennej $suma wartość pola 'suma'. Ja bym to tak widział.
// wow, nie mam ostrzeżenia (IMG:http://forum.php.pl/style_emoticons/default/cool.gif) Ten post edytował phpion.com 7.08.2007, 17:11:44 |
|
|
![]()
Post
#6
|
|
Grupa: Przyjaciele php.pl Postów: 1 590 Pomógł: 40 Dołączył: 11.01.2007 Skąd: Centrum Ostrzeżenie: (0%) ![]() ![]() |
Nie jestem pewien, czy dobrze zrozumiełem, ale:\ ty chyba chcesz zsumować wartości pola jed_min dla konkretnego użytkownika. Czy nie mógłbyś po prostu użyć SUM(jed_min) AS laczna_ilosc WHERE id=$id w zapytaniu? Ewentualnie wyjaśnij bliżej Pozdrawiam. Nie tylko dla użytkownika. Sumy maja się pojawiać dla każdej kolumny, w momencie gdy zmienia ona wartość. Czyli jeżeli jest dwóch klientów to suma dla klienta to suma ze wszystkich wierszy gdzie klient_id jest takie same. Należy też brać pod uwagę kolejność kolumn ... czyli jeżeli tak jak jest w przykładzie pierwsza kolumna klienta, następna brand ... itd aż do pracownika wyglądać tabelka ma tak jak pokazałem w linku a jeżeli np pierwsza kolumną będzie pracownik następną klient potem brand itp itd .. to ma się to też w odpowiedni sposób pokazać Kolejność jak i ilość kolumn jest dowolna z tych podanych przeze mnie w pierwszym poście ( to co w pierwszym poście to max ) |
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 01:39 |