Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> odbieranie danych z klasy
dawidessa
post 18.11.2014, 01:32:37
Post #1





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 14.09.2014

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


Cześć. Mam pytanie, czy znacie lepsze (bardziej optymalne) rozwiązanie dla takiego problemu?

1. Jest klasa, która za zadanie ma pobierać dane z bazy (powiedzmy, że select ma 3 pola)
pobieram przykładowo imię, nazwisko i adres zamieszkania wszystkich userów w bazie, więc pobierze mi pare rekordów, w każdym po 3 dane (imie, nazwisko, adres).
2. Robię w while tablice wielowymiarową, powiedzmy
$tablica[id]['imie'] = $imie_z_bazy_dla_tego_rekordu;
$tablica[id]['nazwisko'] = analogicznie j.w.
$tablica[id]['adres'] = j.w.
3. returnuje w klasie $tablica.
4. wykonuje funkcje klasy, w returnie dostaje ta tablice wielowymiarową przez co znowu muszę tworzyć pętle (for), zeby te wyniki wyświetlić.

moje pytanie brzmi, jak rozwiązać ten problem optymalnie?
Go to the top of the page
+Quote Post
irmidjusz
post 18.11.2014, 10:47:54
Post #2





Grupa: Zarejestrowani
Postów: 279
Pomógł: 60
Dołączył: 25.02.2012

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


Nie ma innego wyjścia, jak obrabiać sekwencyjnie tą strukturę danych. Wszystko się sprowadza do jakiegoś rodzaju pętli. Jeśli martwisz się tym, że wiele razy jakieś pętle będą iterowały po tej tablicy wyników robiąc za każdym razem co innego, i że będzie to nieoptymalne - to może niepotrzebnie się martwisz? Jeśli jest to jednak faktycznie problem, to rozwiązaniem jest zrobienie wszystkiego w jednej, dużej brzydkiej pętli (ta technika optymalizacyjna ma nawet swoją nazwę, nie pamiętam teraz jaką), ewentualnie pobieranie mniejszej ilości danych (stronicowanie itp.) lub przechowywanie wyników tymczasowych, żeby niepotrzebnie nie iterować itd. No ale takie rozwiązania zaśmiecają kod i są robione tylko w wyjątkowych przypadkach (zwykle mocno naruszają paradygmaty OOP). Czasami może też pomóc zwracanie referencji do utworzonej tablicy (jeśli jest ogromna) i operowanie bezpośrednio na niej, ale generalnie trzeba unikać takiego kombinowania.

Podsumowując, najoptymalniej by było, gdyby robić wszystkie operacje przetwarzające te pobrane z bazy dane w jednej pętli, od razu w momencie ich pobierania, i najlepiej operować na generatorze zwracającym dane z zapytania do bazy, z pominięciem etapu tworzenia w PHP pośredniej tablicy przechowującej pobrane wiersze, ale zdajesz sobie chyba sprawę, że to jest powrót do programowania we wczesnym Basicu...


--------------------
there is much to be learned
Go to the top of the page
+Quote Post
dawidessa
post 18.11.2014, 18:05:53
Post #3





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 14.09.2014

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


Dzięki. Staram się ograniczać pobrane rekordy do jak najmniejszej liczby. Faktycznie może niepotrzebnie się przejmuję.
Go to the top of the page
+Quote Post
Daimos
post 29.11.2014, 16:47:56
Post #4





Grupa: Zarejestrowani
Postów: 1 319
Pomógł: 118
Dołączył: 26.11.2003
Skąd: Lublin

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


Na pocieszenie powiem Ci, że chyba każdy framework po pobraniu danych z bazy, przetwarza je w pętli (przynajmniej raz) i dopiero oddaje do zabawy. Dzięki temu mamy też modele.
Wszystko jest przystosowane do małej ilości danych, czyli takiej, na której będziesz operował. W momencie, kiedy będziesz pobierał na raz 1mln rekordów z bazy, można myśleć nad innymi rozwiązaniami wink.gif


--------------------
scriptun.com. Startup z poradnikami do gier ttp.zone i ttpzone.pl
Go to the top of the page
+Quote Post

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: 18.04.2024 - 11:49