Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [PHP][Smarty]Segregowanie danych w wyświetlanej tabeli
kasior
post 1.04.2014, 14:53:59
Post #1





Grupa: Zarejestrowani
Postów: 78
Pomógł: 0
Dołączył: 20.12.2005
Skąd: Bydgoszcz

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


Witam. Mam problem (no inaczej bym nie pisał nie biggrin.gif )
Moze na początek kawałek kodu:

Kod
$sql = 'CALL replacement ('.$changeweek.')';
$stmt = $hDB->prepare($sql);
             $stmt->execute();
            $num = $stmt->rowCount();
            
            $result = $stmt->setFetchMode(PDO::FETCH_ASSOC);
            for ($i=0;$i<$num;$i++){
                $resultw = $stmt->fetch();
                $wr[] = $resultw;
            }
$smarty->assign('wr',$wr);


Mam z tego tablicę:


direction | driver | truck | client
-------------------------------------------------------------
IN | kowalski | CBA 2659 | klient
--------------------------------------------------------------
OUT | nowak | CBA 2659 | klient
-------------------------------------------------------------

Jak to wyrzucic na stronę w Smarty w formie tabelki :


OUT | truck | IN | client
------------------------------------------------
nowak | CBA 2659 | kowalski | klient
-------------------------------------------------

Poprosze o pomoc.

Nikt nie pomoże?

Ten post edytował kasior 1.04.2014, 12:05:36
Powód edycji: [nospor]:


--------------------
Zapraszam do odwiedzenia mojej strony.
Go to the top of the page
+Quote Post
trueblue
post 1.04.2014, 15:19:08
Post #2





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Nie robiłbym tego w Smarty, najlepiej zapytaniem SQL, ale rozumiem, że nie możesz.
Pozostaje PHP.

  1. for ($i=0;$i<$num;$i++){
  2. $resultw = $stmt->fetch();
  3. if($resultw['direction']=='IN')
  4. $wr[$resultw['client']][$resultw['truck']]['in']=$resultw['driver'];
  5. elseif($row['direction']=='OUT')
  6. $wr[$resultw['client']][$resultw['truck']]['out']=$resultw['driver'];
  7. }

Puść to później w Smarty, w dwóch pętlach {foreach} z atrybutem key.
W pierwszej w atrybucie key będziesz mieć klienta, w drugiej, w atrybucie key będzie truck.
Value drugiej pętli, to tablica z dwiema zmiennymi: in oraz out.


--------------------
Go to the top of the page
+Quote Post
kasior
post 1.04.2014, 17:15:57
Post #3





Grupa: Zarejestrowani
Postów: 78
Pomógł: 0
Dołączył: 20.12.2005
Skąd: Bydgoszcz

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


Fajnie opisałeś, ale jednak nie rozumiem tego sad.gif Nigdy nie używałem pętli {foreach} , przeważnie używam {section}


--------------------
Zapraszam do odwiedzenia mojej strony.
Go to the top of the page
+Quote Post
trueblue
post 1.04.2014, 17:30:54
Post #4





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


  1. OUT,truck,IN,client
  2. {foreach from=$wyniki key=client item=tmp}
  3. {foreach from=$tmp key=truck item=drivers}
  4. {$drivers.out},{$truck},{$drivers.in},{$client}
  5. {/foreach}
  6. {/foreach}


I jeszcze możesz uprościć wcześniejszą pętlę w PHP:
  1. for ($i=0;$i<$num;$i++){
  2. $resultw = $stmt->fetch();
  3. $wr[$resultw['client']][$resultw['truck']][strtolower($resultw['direction'])]=$resultw['driver'];
  4.  
  5. }


Ten post edytował trueblue 1.04.2014, 17:37:52


--------------------
Go to the top of the page
+Quote Post
kasior
post 1.04.2014, 17:50:10
Post #5





Grupa: Zarejestrowani
Postów: 78
Pomógł: 0
Dołączył: 20.12.2005
Skąd: Bydgoszcz

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


No chciałbym kliknąc pomógł ale jeszcze nie mogę. To coś nie działa. Dostaje w wyniku kupę danych zupełnie niepotrzebnych w tym nazwy pól bazy.

  1. OUT,truck,IN,client
  2.  
  3. O,direction,O,0
  4. 5,graph_id,5,0
  5. 1,driver,1,0
  6. 1,week,1,0
  7. o,status,o,0
  8. b,color,b,0
  9. ,note,,0
  10. W,truck,W,0
  11. ,infoequipment,,0
  12. ,infoservice,,0
  13. v,client,v,0
  14. ,coach,,0
  15. 1,driver_id,1,0
  16. G,name,G,0
  17. D,last_name,D,0
  18. ,last_name2,,0
  19. 1,active,1,0
  20. ,phone,,0
  21. ,phone2,,0
  22. 1,adr,1,0
  23. 6,system,6,0
  24. 2,adddate,2,0
  25. ,lang,,0
  26. ,type,,0
  27. R,country,R,0
  28. w,weeks,w,0


itd...

jeszcze raz cały mój kod:


  1. $sql = 'CALL replacement ('.$changeweek.')';
  2. $stmt = $hDB->prepare($sql);
  3. $stmt->execute();
  4. $num = $stmt->rowCount();
  5.  
  6. $resultw = $stmt->setFetchMode(PDO::FETCH_ASSOC);
  7. for ($i=0;$i<$num;$i++){
  8. $resultw = $stmt->fetch();
  9. $wr[] = $resultw;
  10. }
  11.  
  12. for ($i=0;$i<$num;$i++){
  13. $resultw = $stmt->fetch();
  14. if($resultw['direction']=='IN')
  15. $wr[$resultw['client']][$resultw['truck']]['in']=$resultw['driver'];
  16. elseif($row['direction']=='OUT')
  17. $wr[$resultw['client']][$resultw['truck']]['out']=$resultw['driver'];
  18. }
  19.  
  20. $smarty->assign('wr',$wr);



  1. OUT,truck,IN,client<br /><br />
  2. {foreach from=$wr key=client item=tmp}
  3. {foreach from=$tmp key=truck item=drivers}
  4. {$drivers.out},{$truck},{$drivers.in},{$client}<br />
  5. {/foreach}
  6. {/foreach}





EDIT >> ok. dureń ze mnie. zostawiłem poprzednią pętlę smile.gif

Ten post edytował kasior 1.04.2014, 17:56:11


--------------------
Zapraszam do odwiedzenia mojej strony.
Go to the top of the page
+Quote Post
trueblue
post 1.04.2014, 17:59:12
Post #6





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


To jest ok, czy nie?
Jeśli nie to pokaż jeden wiersz: print_r($resultw); (wydrukuj w tej pętli PHP).


--------------------
Go to the top of the page
+Quote Post
kasior
post 1.04.2014, 18:05:47
Post #7





Grupa: Zarejestrowani
Postów: 78
Pomógł: 0
Dołączył: 20.12.2005
Skąd: Bydgoszcz

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


Nie do końca jest ok. Zobacz kawałek wyniku:

  1. Rzeźnik -- EKU 8EV1 -- |
  2. Kalandyk -- CNA 66VC -- |
  3. Bzdyra -- CNA 2M80 -- |
  4. Krawczyk -- CB 9964V -- |
  5. Jasiński -- CB 8362W -- |
  6. Ene -- CB 8361W -- |
  7. -- EKU 8EV1 -- Korbal |


patrz na rejestrację EKU 8EV1 - to się nie składa. (out) jest w pierwszym rzędzie a gdzieś dalej (in). Nie wchodza obok siebie
Specjalnie dodałem kreski,zeby oddzielić i podkreślić wiersze

Ten post edytował kasior 1.04.2014, 18:06:32


--------------------
Zapraszam do odwiedzenia mojej strony.
Go to the top of the page
+Quote Post
trueblue
post 1.04.2014, 18:09:03
Post #8





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Nie ma to znaczenia.
A gdzie jest Direction (IN, OUT)?
Pokaż ten sam kawałek drukują w pętli PHP: print_r($resultw);

P.S. Uprość pętlę w PHP - jest w moim poście z przykładem pętli w Smarty.


--------------------
Go to the top of the page
+Quote Post
kasior
post 1.04.2014, 18:15:34
Post #9





Grupa: Zarejestrowani
Postów: 78
Pomógł: 0
Dołączył: 20.12.2005
Skąd: Bydgoszcz

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


  1. Array ( [direction] => IN [0] => IN [graph_id] => 5496 [1] => 5496 [driver] => 138 [2] => 138 [week] => 15 [3] => 15 [status] => on truck [4] => on truck [color]
  2. => b3b3b3 [5] => b3b3b3 [note] => [6] => [truck] => [7] => [infoequipment] => [8] => [infoservice] => [9] => [client] => [10] => [coach] => [11] => [driver_id] =>
  3. 138 [12] => 138 [name] => Ioan [13] => Ioan [last_name] => Sandulea [14] => Sandulea [last_name2] => [15] => [active] => 1 [16] => 1 [phone] => [17] => [phone2]
  4. => [18] => [adr] => 1 [19] => 1 [system] => 6-2 [20] => 6-2 [adddate] => 2014-03-28 15:03:41 [21] => 2014-03-28 15:03:41 [lang] => [22] => [type] => CC [23] =>
  5. CC [country] => Romania [24] => Romania [weeks] => w1:w2:w3:w4:w5:w6:w7:w8:w9:w10:w11:w12:w13:w14:w15:w16:w17:w18:w19:w20:w21:w22:w23:w24:w25:w26:w27:w28:w29:w30:w31:w32:w33:w34:w35:w36:w37:w38:
  6. w39:w40:w41:w42:w43:w44:w45:w46:w47:w48:w49:w50:w51:w52 [25] => w1:w2:w3:w4:w5:w6:w7:w8:w9:w10:w11:w12:w13:w14:w15:w16:w17:w18:w19:w20:w21:w22:w23:w24:w25:w26:w27:w28:w29:w30:w31:w32:w33:w34:w35:w36:w37:w38:
  7. w39:w40:w41:w42:w43:w44:w45:w46:w47:w48:w49:w50:w51:w52 [groups] => 2 [26] => 2 )


Pętlę oczywiście uprościłem, na tamtej tylko jeden rekord wyświetlało

Ten post edytował kasior 1.04.2014, 18:17:31


--------------------
Zapraszam do odwiedzenia mojej strony.
Go to the top of the page
+Quote Post
trueblue
post 1.04.2014, 18:19:33
Post #10





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Ok, dzięki.
A jaki jest klient dla tych dwóch rekordów, które podałeś wcześniej (rejestracja EKU 8EV1).


--------------------
Go to the top of the page
+Quote Post
kasior
post 1.04.2014, 18:22:04
Post #11





Grupa: Zarejestrowani
Postów: 78
Pomógł: 0
Dołączył: 20.12.2005
Skąd: Bydgoszcz

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


No akurat nie ma. Może to ma jakis związek,ze nie ma wszystkich danych jeszcze? Myślałem,ze jak ich nie będzie to beda puste pola.
Spróbuje to odpalić z tygodniem w którym są wszystkie dane


--------------------
Zapraszam do odwiedzenia mojej strony.
Go to the top of the page
+Quote Post
trueblue
post 1.04.2014, 18:24:45
Post #12





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Akurat tu tak nie będzie, ale może to rozwiązanie Cię zadowoli:

  1. for ($i=0;$i<$num;$i++){
  2. $resultw = $stmt->fetch();
  3. $wr[empty($resultw['client'])?("brak-".$i):$resultw['client']][$resultw['truck']][strtolower($resultw['direction'])]=$resultw['driver'];
  4.  
  5. }


Ten post edytował trueblue 1.04.2014, 18:24:53


--------------------
Go to the top of the page
+Quote Post
kasior
post 1.04.2014, 18:28:55
Post #13





Grupa: Zarejestrowani
Postów: 78
Pomógł: 0
Dołączył: 20.12.2005
Skąd: Bydgoszcz

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


To dalej nie składa wierszy do kupy


--------------------
Zapraszam do odwiedzenia mojej strony.
Go to the top of the page
+Quote Post
trueblue
post 1.04.2014, 18:30:12
Post #14





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Sprawdź czy obydwie rejestracje EKU, nie mają czasem spacji przed lub po.


--------------------
Go to the top of the page
+Quote Post
kasior
post 1.04.2014, 18:43:47
Post #15





Grupa: Zarejestrowani
Postów: 78
Pomógł: 0
Dołączył: 20.12.2005
Skąd: Bydgoszcz

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


Nie maja. Zresztą to jedno i to samo pobierane z bazy i wrzucane w odpowiednie pola.

Moze zobrazuje sytuację to będzie lepiej.
mam ładna tabelke z kierowcami , trzymajmy sie nazwy - OUT



Nastepna tabelka przedstawia IN



Tabelka którą teraz chcę uzyskać wyglądałaby tak biorąc pod uwage,ze nie zawsze są wszystkie dane (np wchodzi dwóch na jednego trucka bo jeden się uczy) lub nie ma klienta lub nie ma wchodzącego np.



Jest to po prostu takie zestawienie wszystkiego

Ten post edytował kasior 1.04.2014, 18:44:54


--------------------
Zapraszam do odwiedzenia mojej strony.
Go to the top of the page
+Quote Post
trueblue
post 1.04.2014, 18:53:46
Post #16





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


W jednym się myliłem, rekordy bez klientów nie będą się wzajemnie nadpisywać w docelowej tabeli. Można więc wrócić do poprzedniego rozwiązania.
Z tego co pokazujesz trudno wywnioskować czy są tam spacje czy nie, bo być może program generujący te widoki je usuwa.

Ja przetestowałem na tabeli z danymi w PHP, działa bez problemu, może brakować klienta, jak i IN lub OUT:

  1. $arr[]=array('direction'=>'IN','driver'=>'kowalski','truck'=>'EKU 8EV1','client'=>'klient');
  2. $arr[]=array('direction'=>'OUT','driver'=>'nowak','truck'=>'EKU 8EV1','client'=>'klient');
  3. $arr[]=array('direction'=>'OUT','driver'=>'nowak2','truck'=>'AAA 2659','client'=>null);
  4. $arr[]=array('direction'=>'IN','driver'=>'kowalski2','truck'=>'AAA 2659','client'=>null);
  5. $arr[]=array('direction'=>'OUT','driver'=>'nowak3','truck'=>'BBB 2659','client'=>null);
  6. $arr[]=array('direction'=>'IN','driver'=>'kowalski3','truck'=>'BBB 2659','client'=>null);
  7. $arr[]=array('direction'=>'OUT','driver'=>'nowak3','truck'=>'CCC 2659','client'=>'marian');
  8.  
  9.  
  10. $wynik=array();
  11. foreach($arr as $row){
  12. $wynik[$row['client']][$row['truck']][strtolower($row['direction'])]=$row['driver'];
  13. }
  14. $smarty->assign('wynik',$wynik);
  15. $smarty->display('test.tpl');


To co generuje test.pl:

OUT,truck,IN,client
nowak,EKU 8EV1,kowalski,klient
nowak2,AAA 2659,kowalski2,
nowak3,BBB 2659,kowalski3,
nowak3,CCC 2659,,marian

Możesz jeszcze spróbować tak:
  1. $wynik[trim($row['client'])][trim($row['truck'])][strtolower($row['direction'])]=$row['driver'];



--------------------
Go to the top of the page
+Quote Post
kasior
post 1.04.2014, 19:10:04
Post #17





Grupa: Zarejestrowani
Postów: 78
Pomógł: 0
Dołączył: 20.12.2005
Skąd: Bydgoszcz

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


ok. czyli co zostawiam z tamtego kodu?? bo już się zakręciłem. począwszy od zapytania sql


--------------------
Zapraszam do odwiedzenia mojej strony.
Go to the top of the page
+Quote Post
trueblue
post 1.04.2014, 19:11:05
Post #18





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


  1. for ($i=0;$i<$num;$i++){
  2. $resultw = $stmt->fetch();
  3. $wr[trim($resultw['client'])][trim($resultw['truck'])][strtolower($resultw['direction'])]=$resultw['driver'];
  4.  
  5. }


--------------------
Go to the top of the page
+Quote Post
kasior
post 1.04.2014, 19:16:06
Post #19





Grupa: Zarejestrowani
Postów: 78
Pomógł: 0
Dołączył: 20.12.2005
Skąd: Bydgoszcz

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


a w smarty nic już nie przerabiałeś? bo ja ciągle mam bajzel. jeszcze raz cały kod mój.:

  1. $sql = 'CALL replacement ('.$changeweek.')';
  2. $stmt = $hDB->prepare($sql);
  3. $stmt->execute();
  4. $num = $stmt->rowCount();
  5.  
  6. for ($i=0;$i<$num;$i++){
  7. $resultw = $stmt->fetch();
  8. $wr[trim($resultw['client'])][trim($resultw['truck'])][strtolower($resultw['direction'])]=$resultw['driver'];
  9. }
  10.  
  11. $smarty->assign('wr',$wr);



Kod
OUT,truck,IN,client<br /><br />
                    {foreach from=$wr key=client item=tmp}
                        {foreach from=$tmp key=truck item=drivers}
                            {$drivers.out} -- {$truck} -- {$drivers.in}  |<br />
                        {/foreach}
                    {/foreach}


--------------------
Zapraszam do odwiedzenia mojej strony.
Go to the top of the page
+Quote Post
trueblue
post 1.04.2014, 19:18:43
Post #20





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


W Smarty nic.
Wcześniej pisałeś o bałaganie kiedy jakiejś pętli nie usunąłeś.
Czym teraz bałagan się objawia?


--------------------
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 24.07.2025 - 19:16