Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Grupowanie wyników z tablicy wg drugiej tablicy
Forum PHP.pl > Forum > PHP
Cienki1980
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.
likemandrake
no rzeczywiscie troszke zamotane 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
Cienki1980
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
Cysiaczek
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.
phpion
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 cool.gif
Cienki1980
Cytat(Cysiaczek @ 7.08.2007, 18:03:52 ) *
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 )
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.