![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 496 Pomógł: 2 Dołączył: 15.07.2011 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Chciałem się zapytać czy dobrze rozwiązałem poniższy problem:
Mam takie encje:
Potrzebuję pobrać dane tak aby wyświetlić dla każdego użytkownika sumy punktów dla każdej osobnej kolejki plus na końcu sumę wszystkich punktów ze wszystkich kolejek , tak aby później wyświetlić to w widoku TWIG, coś w tym stylu: Imie /k1 /k2 /k3 /k4 /k5 / suma --------------------------------- User3 / 4 / 2 / 4 / 2 / 4 / 16 User1 / 2 / 0 / 4 / 4 / 2 / 12 User2 / 2 / 0 / 2 / 4 / 2 / 1 Zrobiłem to tak:
Proszę o uwagi. Co zrobiłem źle ? Jak można to inaczej (może prościej) napisać ? Będę wdzięczny za poprawki do kodu. |
|
|
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Cytat Co zrobiłem źle ? W jakim sensie zrobiles zle? Dane ci wyswietlaja nie tak jak chcesz czy moze poprostu pytasz czy mozna to zrobic optymalniej?
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 496 Pomógł: 2 Dołączył: 15.07.2011 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Dane wyświetlają się tak jak powinny a więc tutaj jestem zadowolony.
Pytam właśnie czy można to zrobić lepiej/porządniej/profesjonalniej w Symfony ? Nie wiem po prostu czy nie napsiałem za dużo kodu, czy pokazując taki kod komuś nie powinienem się wstydzić (IMG:style_emoticons/default/wink.gif) |
|
|
![]()
Post
#4
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
z punktami 1 2 3 faktycznie troche przekombinowales...Wszystko to da sie zrobic tak:
i juz. Masz zalatwione duplikaty tez tym sposobem. Dodaj tylko sortowanie do select po userid i po sprawie. Nie nadawaj aliasu na ID jako user.... to jest user_id a nie user. to dwie rozne rzeczy. Czemu zakladasz ze mozesz miec max 10 userow - kolejna rzecz do poprawki. Pisze petle uniwersalne. Poza tym punnkty 1 2 3 4 mozna zrobic w jednej petli zamiast 1000 razy latac po tej samej petli w roznych czesciach kodu. Tu masz grupowanie: http://nospor.pl/grupowanie-wynikow.html Nie jest to co ty tu masz, ale rozniez uzywa grupowania w jednym obiegu petli zamiast w kilku. Dalszych punktow nie sprawdzalem, bo troche mam wlasnej roboty |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 496 Pomógł: 2 Dołączył: 15.07.2011 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
trochę mnie natchnąłeś ... i udało się fajnie zoptymalizować:
Podsumujmy: // z SQLa miałem taką tablicę:
// 1. Sumuję więc łącznie wszystkie punkty ze wszystkich kolejek dla każdego usera
// otrzymuję to:
// 2. Sortuję aby wiedzieć kto ma najwięcej punktów // otrzymuję to:
// 3. Przypisuję punkty dla każdej kolejki osobno dla posortowanych już userów // według łącznej sumy wszystkich punktów ze wszystkich kolejek
// i otrzymuję to co chcę a więc to:
można to jeszcze zoptymalizować albo zrobić lepiej ? Ten post edytował damianooo 26.01.2016, 20:54:20 |
|
|
![]()
Post
#6
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
nie: $this->users[$details['user']] = $this->users[$details['user']] + (int)$details['suma'];
a: $this->users[$details['user']] += (int)$details['suma']; prosilem bys uzywal user_id... oj, bo sie pogniewamy... $this->final_result[$details['username']][] = (int)$details['suma']; kluczem powinno byc id usera nie jego name. userzy teoretycznie moga miec te same name, id nie |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 496 Pomógł: 2 Dołączył: 15.07.2011 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
ok poprawiłem i mam teraz tak:
Apropo tego, że kluczem powinno być id a nie nazwa usera to wiem (IMG:style_emoticons/default/smile.gif) ... ja to zrobiłem tak celowo ponieważ potrzebuję takiej właśnie tablicy aby ją wyrzucić w TWIGu ... id mi tam nie są potrzebne , to ma być wyświetlone tak: Imie /k1 /k2 /k3 /k4 /k5 / suma --------------------------------- User3 / 4 / 2 / 4 / 2 / 4 / 16 User1 / 2 / 0 / 4 / 4 / 2 / 12 User2 / 2 / 0 / 2 / 4 / 2 / 10 Rozumiem, że imiona mogą się powtarzać ale ja mam to w mojej aplikacji rozwiązane tak że jak jest np. dwóch Marków to jeden jest Marek 1 a drugi Marek 2 Ten post edytował damianooo 27.01.2016, 09:56:19 |
|
|
![]()
Post
#8
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Nabrales zlych nawykow i zamiast je zmienic, poki masz okazje, to twardo przy nich trwasz.... Kiedys sie na tym przejedziesz, ale to juz twoja sprawa
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 496 Pomógł: 2 Dołączył: 15.07.2011 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
... wolę zmienić nawyki ...
Obecnie w TWIGu miałem tak:
jak zmienię poniższy kawałek kodu z:
na
to w TWIGu będę miał IDki a tego nie chcę ... jak to powinno wyglądać ? |
|
|
![]()
Post
#10
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
tablica final_result powinna wygladac tak:
2 => [ 'name' => 'mateusz', 'sums' => [24,26,28,26] ], 4 => ..... Masz wowczas uniwersalna tablice, niezalezna od ewentualnych takich samych nazw a gdy najdzie potrzeba mozesz do niej dodawac kolejne elementy dla kazdego usera bez przerabiania polowy kodu. |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 496 Pomógł: 2 Dołączył: 15.07.2011 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
a więc powinno to być tak zrobione:
w związku z tym TWIG powinien być taki:
pięknie (IMG:style_emoticons/default/smile.gif) dzięki nospor pozdrawiam |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 872 Pomógł: 94 Dołączył: 31.03.2010 Ostrzeżenie: (0%) ![]() ![]() |
Czy czasem repozytoria obiektów nie powinny zwracać właśnie obiektów, które obsługują lub ich kolekcji? Może lepiej przenieść generowanie tych statystyk na zewnątrz repozytorium, np. do jakiejś logiki, np.:
W tej sposób uniezależniasz się od źródła danych, bo równie dobrze tacy użytkownicy mogą pochodzić z cache lub jakiejś zewnętrznej usługi po REST/WS. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 24.08.2025 - 21:58 |