Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Odwołanie do dwóch tabel + array w zależności od ID, jak wykonać?
casperii
post 4.10.2018, 16:54:36
Post #1





Grupa: Zarejestrowani
Postów: 680
Pomógł: 28
Dołączył: 14.08.2014

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


Panowie mam dwie tabele.

pierwsza to rodzice:
idr
imie
nazwisko

druga tabela to dzieci:
idd
imie
wiek

załóżmy że mamy:

7 Jan Bebe
8 Andrzej Keke
9 Sebastian Bzz

7 Jarek 8
7 Kasia 5
8 Ania 17

potrzebuje uzyskać wynik:

Jan Bebe ma 2 dzieci:
Jarek 8, Kasia 5

Andrzej Keke ma 1 dzieci:
Ania 17

Sebastian Bzz ma 0 dzieci

zapytanie wygląda tak:
  1. SELECT * FROM `rodzice` LEFT JOIN `dzieci` ON `idr` = `idd` GROUP BY `nazwisko` ORDER BY `nazwisko`

Go to the top of the page
+Quote Post
viking
post 4.10.2018, 18:15:50
Post #2





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

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


Przede wszystkim to taka struktura tabel nie ma żadnego sensu.


--------------------
Go to the top of the page
+Quote Post
casperii
post 4.10.2018, 18:59:20
Post #3





Grupa: Zarejestrowani
Postów: 680
Pomógł: 28
Dołączył: 14.08.2014

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


@viking możesz uzasadnić dlaczego nie ma sensu?
Po prostu chce przypisać dzieci do danego rodzica.
Go to the top of the page
+Quote Post
mrk9109
post 4.10.2018, 20:24:20
Post #4





Grupa: Zarejestrowani
Postów: 445
Pomógł: 3
Dołączył: 4.06.2010

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


To do tabeli dzieci powinieneś dodać id rodzica do którego należy
Go to the top of the page
+Quote Post
casperii
post 4.10.2018, 21:25:41
Post #5





Grupa: Zarejestrowani
Postów: 680
Pomógł: 28
Dołączył: 14.08.2014

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


@mrk9109 przecież jest ID :

  1. ON `idr` = `idd`
Go to the top of the page
+Quote Post
markonix
post 5.10.2018, 00:27:15
Post #6





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

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


Dziecko może mieć więcej niż jednego rodzica (0-2, jeżeli doliczymy opiekunów to może i więcej niż 2).
Pytanie czy nie sensowniej stworzyć jedną tabele z osobami, a połączyć dzieci z opiekunami tabelą: id_parent, id_child. W takiej tabeli można dodać dodatkową informacje np. relacja ("tata", "mama").


--------------------
Go to the top of the page
+Quote Post
mrk9109
post 6.10.2018, 04:37:23
Post #7





Grupa: Zarejestrowani
Postów: 445
Pomógł: 3
Dołączył: 4.06.2010

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


I w idd masz zapisane idr czy raczej nie ? Bo musisz to powiązać

Czyli do danego id rodzica wyświetlacz wszystkie dzieci które maja jego id i tak samo sumujesz
Go to the top of the page
+Quote Post
casperii
post 6.10.2018, 10:37:57
Post #8





Grupa: Zarejestrowani
Postów: 680
Pomógł: 28
Dołączył: 14.08.2014

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


tabela rodzice:
id | idr | imie | nazwisko
1 | 7 | Jan | Bebe
2 | 8 | Andrzej | Keke
3 | 9 | Sebastian| Bzz

tabela dzieci:
id | idd | imie |wiek
1 | 7 | Jarek | 8
2 | 7 |Kasia | 5
3 | 8 | Ania |17

wyświetlenie wyniku:

Jan Bebe ma dzieci:
Jarek 8, Kasia 5

Andrzej Keke ma dzieci:
Ania 17

zapytanie SQL:
  1. SELECT * FROM `rodzice` LEFT JOIN `dzieci` ON `idr` = `idd` GROUP BY `nazwisko` ORDER BY `nazwisko`


php:
  1. $dzieci = array();
  2. while($row = $sql->fetch(PDO::FETCH_ASSOC)){
  3. $joint = $row['idd'];
  4.  
  5. // trzeba by było to jakoś foreachem przelecieć chyba?
  6. }
Go to the top of the page
+Quote Post
markonix
post 6.10.2018, 11:33:23
Post #9





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

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


Jak nie zależy Ci na optymalności to możesz po prostu wylistować rodziców w pętli i w każdym obrocie pobrać dla danego rodzica dzieci (do policzenia i wyświetlenia wystarczy jedno zapytanie).


--------------------
Go to the top of the page
+Quote Post
casperii
post 6.10.2018, 12:00:11
Post #10





Grupa: Zarejestrowani
Postów: 680
Pomógł: 28
Dołączył: 14.08.2014

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


A jak by zrobić coś w ten deseń:

  1. $dzieci = array();
  2. while($row = $sql->fetch(PDO::FETCH_ASSOC)){
  3. $joint = $row['idd'];
  4.  
  5. if (!isset($dzieci[$joint]))
  6. $dzieci[$joint] = array('idd' => $row['idd'], 'get' => array());
  7.  
  8. if (!empty($row['idr']))
  9. $dzieci[$joint]['get'][] = array('idr'=>$row['idr'], 'wiek'=>$row['wiek'], 'imie'=>$row['imie']);
  10.  
  11.  
  12. foreach ($dzieci as $idzik => $child){
  13. echo ''.$child['idr'].' ('.count($child['get']).') <br>';
  14. }
  15. }


pobiera mi ilość dzieci dla danego rodzica, tylko jak teraz zrobić by wyświetliło mi te dzieci poniżej smile.gif
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: 24.04.2024 - 17:15