konto usunięte

Temat: Jak wykonać podzapytanie albo jak je wyświetlić ?

Mam tabelę z punktami

id | nzwa
1 | punkt 1
2 | punkt 2
3 | punkt 3

I mam drugą tabelę z informacjami o tych punktach

id | id_tab_punktami | info
1 | 1 | info 1
2 | 1 | info 2
3 | 1 | info 3
4 | 2 | info 1
5 | 2 | info 2

Teraz w widoku chciałbym wyświetlić takie coś

PUNKTY
punkt 1
info 1
info 2
info 3

punkt 2
info 1
info 2

Czy mam to wykonać controlerze zrobić zapytanie któe zwroci tablice punktów i potem podzapytania szczegółowe i wkleić to do tablicy i zwrocic tablice do widoku ? Czy da się to jakoś wykonać z poziomu SQL żeby taką tablicę otrzymać ? Jak poprawnie powinno to wyglądać ?

Temat: Jak wykonać podzapytanie albo jak je wyświetlić ?

Możesz zapytać SQLem np. z left joinem sortowane po id_punkt (żeby nie przebudowywać struktury). Później w pętli przy wyświetlaniu sprawdzenie czy id_punkt inny niż poprzedni, jeśli tak to nowy wyświetlasz nowy punkt. Ewentualnie możesz zrobić do wykorzystania w sposób modułowy, czyli taki wyniki zjoinowanego zapytania przebudować do dwuwymiarowej tablicy w stylu:

array(
0 => array(
'id_punkt' => 1,
'nazwa' => 'punkt 1',
'_children' => array(
0 => array(
'id' => 1,
'nazwa' => 'info 1'
),
1 => array(
'id' => 2,
'nazwa' => 'info 2'
),
)
),
1 => array(
'id_punkt' => 2,
'nazwa' => 'punkt 2',
'_children' => array(
0 => array(
'id' => 3,
'nazwa' => 'info 3'
),
1 => array(
'id' => 4,
'nazwa' => 'info 4'
),
)
)
)


Wyświetlenie takiej struktury foreachem zagnieżdżonym w foreachu jest proste a dzięki 1 zapytaniu do bazy powinno działać dość szybko.

konto usunięte

Temat: Jak wykonać podzapytanie albo jak je wyświetlić ?

Witaj.

SELECT * FROM punkty as p
LEFT JOIN punkty_info as pi ON p.id = pi.id_punkt;

1;"punkt 1";1;1;"info 1"
1;"punkt 1";2;1;"info 2"
1;"punkt 1";3;1;"info 3"
2;"punkt 2";4;2;"info punkt 2 - 1"
2;"punkt 2";5;2;"info punkt 2 - 2"

==========================

SELECT p.nazwa, ARRAY(SELECT info FROM punkty_info as pi WHERE pi.id_punkt = p.id) FROM punkty as p;

"punkt 1";"{"info 1","info 2","info 3"}"
"punkt 2";"{"info punkt 2 - 1","info punkt 2 - 2"}"

Baza: PostgeSQL

Pozdrawiam. :-)



Wyślij zaproszenie do