chciałbym połączyć 3 tabele: users, users_in_groups, users_groups,
chciałbym aby return array wyglądał tak:
array ( [0] => array( 'user_id' => 3, 'user_name' => 'Jan', 'user_in_groups' => array( [0] => array( 'group_id' => 1, 'group_name' => 'admin', ) ) ) )
Mam kod:
CREATE OR REPLACE VIEW view_users_in_groups AS SELECT u.id AS user_id, u.name AS user_name, u.email AS user_email, ug.id AS group_id, ug.name AS group_name, ug.alias group_alias FROM users u, users_groups ug, users_in_groups uig WHERE u.id = uig.user_id AND ug.id = uig.group_id;
Zwraca:
array(3) { [0]=> object(stdClass)#28 (6) { ["user_id"]=> string(1) "5" ["user_name"]=> string(6) "Michal" ["user_email"]=> string(17) "mail@gmail.com" ["group_id"]=> string(1) "1" ["group_name"]=> string(5) "admin" ["group_alias"]=> string(6) "admins" } [1]=> object(stdClass)#27 (6) { ["user_id"]=> string(1) "5" ["user_name"]=> string(6) "Michal" ["user_email"]=> string(17) "mail@gmail.com" ["group_id"]=> string(1) "3" ["group_name"]=> string(9) "moderator" ["group_alias"]=> string(9) "moderator" } [2]=> object(stdClass)#26 (6) { ["user_id"]=> string(1) "5" ["user_name"]=> string(6) "Michal" ["user_email"]=> string(17) "mail@gmail.com" ["group_id"]=> string(1) "4" ["group_name"]=> string(7) "writers" ["group_alias"]=> string(6) "writer" } }
W takim układzie mam utrudniony odbiór danych, nie użyję pętli foreach ( zwróci 3 razy to samo, z innymi grupami ).
Mam jeszcze problem z użytkownikami, którzy nie należą do żadnej z grup, chciałbym mieć ich też w tym widoku ( chyba najlepiej by było, żeby ich user_in_groups był NULL a nie array ).