Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Grupowanie wyników z tablicy wg drugiej tablicy
Cienki1980
post
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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
likemandrake
post
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
Go to the top of the page
+Quote Post
Cienki1980
post
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
Go to the top of the page
+Quote Post
Cysiaczek
post
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.
Go to the top of the page
+Quote Post
phpion
post
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
Go to the top of the page
+Quote Post
Cienki1980
post
Post #6





Grupa: Przyjaciele php.pl
Postów: 1 590
Pomógł: 40
Dołączył: 11.01.2007
Skąd: Centrum

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


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

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

 



RSS Aktualny czas: 23.08.2025 - 01:39