Wpis z mikrobloga

Muszę pobrać dane z bazy danych i mam pewien problem. W bazie danych mam tabelkę użytkowników i szkół. Użytkownik może mieć wiele szkół. Muszę więc wyświetlić na stronie, do jakich szkół należy ten użytkownik. Jeżeli piszę zwykły select:
SELECT f0.id as id0,
f0.roles AS roles0,
f0.firstname AS firstname1,
f0.lastname AS lastname2,
f0.email AS email3,
f0.created AS created4,
f0.updated AS updated5,
f0.isnewsletter AS isnewsletter6,
s1.title AS title7,
s2.title AS title8
FROM fosuser f0
LEFT JOIN userschool u3 ON f0.id = u3.userid
LEFT JOIN school s1
ON u3.schoolid = s1.id
LEFT JOIN user
schoolsubject u4 ON u3.id = u4.userschoolid
LEFT JOIN subject s2 ON u4.subjectid = s2.id
GROUP BY f0.id,
f0
.email,
f0.roles,
f0
.firstname,
f0
.lastname,
f0
.created,
f0.updated,
f0
.isnewsletter,
s1
.title,
s2.title

to otrzymuję wynik:

user.id | szkola.id
1 1
1 2

A chciałbym otrzymać wynik:

user.id | szkola.id
1 1, 2

Znalazłem fajną funkcję array
agg() i gdy z niej korzystam otrzymuję poprawny wynik:

SELECT f0_.id as id_0,
f0_.roles AS roles_0,
f0_.first_name AS first_name_1,
f0_.last_name AS last_name_2,
f0_.email AS email_3,
f0_.created AS created_4,
f0_.updated AS updated_5,
f0_.is_newsletter AS is_newsletter_6,
array_agg(s1_.title) AS title_7,
array_agg(s2_.title) AS title_8
FROM fos_user f0_
LEFT JOIN user_school u3_ ON f0_.id = u3_.user_id
LEFT JOIN school s1_ ON u3_.school_id = s1_.id
LEFT JOIN user_school_subject u4_ ON u3_.id = u4_.user_school_id
LEFT JOIN subject s2_ ON u4_.subject_id = s2_.id
GROUP BY f0_.id

Mam jednak taki problem, że wynik otrzymuję w formacie tablicy postgresql i muszę to później wyświetlić na stronie i wyeksportować do pliku excel, więc musiałbym jakoś sparsować tablicę, żeby wyświetlić to w przyjemny dla oka sposób. Tu pojawia się kolejny problem, bo nie mogę zmienić tablicy w np. JSON, ponieważ korzystam z symfony2 i doctrine, która korzysta z DQL i musiałbym napisać klasę, która pozwoliłąby mi skorzystać z takej funkcji.
Nie da się jakoś inaczej napisać SQL, aby otrzymać taki sam wynik? Ewentualnie jak zrobić, żeby tą tablicę wyświetlić w TWIG i wyeksportować do xls?

Wołam @javaman bo zna się na #postgresql

#php #symfony2 #sql #webdev #webdevhelp
  • 9
  • Odpowiedz
@mariecziek: ja na raw query i result set mapperze bez problemu osiągnąłem to co ty chcesz tj zamiast dwa razy tego samego user.id i szkola.id w tablicy miałem user.id raz i obok jego szkoly, sam doctrine też to potrafi
  • Odpowiedz