Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Łączenie tablic przy pomocy klucza
Mephis
post
Post #1





Grupa: Zarejestrowani
Postów: 94
Pomógł: 1
Dołączył: 16.12.2012

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


Witam.

Mam sobie taki problem. Otóż potrzebuję rozwiązania, które pozwoli mi na wcielenie elementów jednej tablicy do drugiej.
Chodzi o zredukowanie ilości zapytań do bazy danych oraz pętel.

Postaram się przedstawić problem najprościej jak mogę - na przykładzie np. newsów i komentarzy do nich.

Pobieram z bazy wszystkie newsy i otrzymuję ich identyfikatory i rzecz jasna jakąś tam treść.
Następnie pobieram z bazy komentarze do newsów i otrzymuję ich identyfikator główny oraz identyfikator odnoszący się do newsa.

I teraz: wykonałem 2 zapytania do bazy posiadam 2 listy: jedną z newsami a drugą z komentarzami. Np.:
  1. [0] => Array (
  2. [news] => 1
  3. [tresc] => tesc1
  4. )
  5. [1] => Array (
  6. [news] => 2
  7. [tresc] => tesc2
  8. )
  9. )
  10.  
  11. [0] => Array (
  12. [komentarz] => 1
  13. [news] => 1
  14. [tresc] => komentarz pierwszy do newsa 1
  15. )
  16. [1] => Array (
  17. [komentarz] => 2
  18. [news] => 1
  19. [tresc] => komentarz drugi do newsa 1
  20. )
  21. [2] => Array (
  22. [komentarz] => 3
  23. [news] => 2
  24. [tresc] => komentarz pierwszy do newsa 2
  25. )
  26. )


A chciałbym połączyć to tak, aby wyglądało to w ten sposób:
  1. [0] => Array (
  2. [news] => 1
  3. [tresc] => tesc1
  4. [komentarze] => Array (
  5. [0] => Array (
  6. [komentarz] => 1
  7. [news] => 1
  8. [tresc] => komentarz pierwszy do newsa 1
  9. )
  10. [1] => Array (
  11. [komentarz] => 2
  12. [news] => 1
  13. [tresc] => komentarz drugi do newsa 1
  14. )
  15. )
  16. )
  17. [1] => Array (
  18. [news] => 2
  19. [tresc] => tesc2
  20. [komentarze] => Array (
  21. [2] => Array (
  22. [komentarz] => 3
  23. [news] => 2
  24. [tresc] => komentarz pierwszy do newsa 2
  25. )
  26. )
  27. )
  28. )
  29. )


Zaiste można pobrać newsy a potem w pętli pobierać do nich komentarze ale rozwiązanie to nie jest zbyt optymalne.

Można także w pętli odtworzyć tablicę z newsami i potem przeszukiwać za każdym razem tablicę z komentarzami, coś w tym rodzaju:
  1. $aktualnosci = $this->pobierz_aktualnosci();
  2. $komentarze= $this->pobierz_komentarze();
  3.  
  4. $newsy = [];
  5. foreach($aktualnosci as $aktualnosc) {
  6. foreach($komentarzeas $komentarz) {
  7. if($komentarz['news'] == $aktualnosc['news'])
  8. $aktualnosc['komentarze'][] = $komentarz;
  9. }
  10. $newsy[] = $news;
  11. }


Ale to rozwiązanie nie wydaje mi się też zbyt optymalne.

Wydaje mi się, że próbuję wynajdywać koło na nowo. Istnieje na to jakiś prosty sposób? Jakaś gotowa funkcja tablicy? Coś w rodzaju połączenia obu tablic przy pomocy klucza, który wiązałby obie tablice w jakiś sposób.
Najlepiej, jakby dało się to załatwić już na poziomie pobierania danych z bazy.

Ten post edytował Mephis 5.02.2016, 15:08:49
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Mephis
post
Post #2





Grupa: Zarejestrowani
Postów: 94
Pomógł: 1
Dołączył: 16.12.2012

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


Póki co potrzebowałem samego sposobu na wypełnienie "newsów" komentarzami. Ostatecznie pobierany byłby tylko pewien zakres elementów.

Sposób przedstawiony pod tym linkiem jest raczej dobry, gdyż ogranicza ilość zapytań do jednego, ale żeby poprawnie wyświetlić zakres "newsów", musiałbym w zapytaniu dodać warunek z podzapytaniem
  1. "...WHERE `id_newsa` IN (SELECT `id` FROM `newsy` LIMIT x)"

Czy takie rozwiązanie w tym przypadku jest dobre?

Ten post edytował Mephis 5.02.2016, 16:23:55
Go to the top of the page
+Quote Post

Posty w temacie


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: 15.10.2025 - 15:57