Diskuze: Dvojitý join do jednej tabuľky

Ostatní jazyky SQL SQL a databáze Dvojitý join do jednej tabuľky

Avatar
Mego
Člen
Avatar
Mego:

Skúšam pre našu farnosť urobiť appku, kde by sa zapisovali pohreby a svadby, ktorý kňaz má kedy slúžiť, ktorý organista hrať a pod. V podstate ide o to, že mám dump tabuľku pohrebov. Okrem iného obsahuje stlpce:

priest_id, organ_player_id - čiže id kňaza a id organistu. Obidvaja sa však nachádzajú v tabuľke "users" a navyše ešte potrebuje liezť do "user_profiles", aby som získal ich mená. V "users" je len nickname. Teda potrebujem raz ísť do user po meno kňaza a druhý krát do user po meno organistu.
Robím to v laraveli. Tu je query builder:

$results = DB::table('funerals as f')
                        ->join('users as ua', 'f.priest_id', '=', 'ua.id')
                        ->join('users as ub', 'f.organ_player_id', '=', 'ub.id')
                        ->join('user_profiles as upa', 'ua.id', '=', 'upa.user_id')
                        ->join('user_profiles as upb', 'ub.id', '=', 'upb.user_id')
                        ->where('f.parish_id', '=', $parish_id)
                        ->get();

Tu je vygenerovaný SQL... vracia 0 rows :(

select * from `funerals` as `f` inner join `users` as `ua` on `f`.`priest_id` = `ua`.`id` inner join `users` as `ub` on `f`.`organ_player_id` = `ub`.`id` inner join `user_profiles` as `upa` on `ua`.`id` = `upa`.`user_id` inner join `user_profiles` as `upb` on `ub`.`id` = `upb`.`user_id` where `f`.`arish_id` = 1
Odpovědět 19. října 22:34
Radšej 15 minút skôr, ako 15 sekúnd neskoro...
Avatar
Vlado Cukalovsky:

Ako zkusil by som tie double joiny spojit do jedneho a do podmienky on hodit OR. Nieco take:

select *
from funerals f
inner join users s on s.id = f.priest_id or s.id = f.organ_player_id
inner join user_profiles sp on sp.id = s.id
where ...

Netusim ci to funguje :D Ale napadlo ma to ako prve.

Editováno 19. října 23:10
 
Nahoru Odpovědět 19. října 23:09
Avatar
Mego
Člen
Avatar
Mego:

Skúsiť to budem môcť až večer... ale ono keď zakomentujem prvý, alebo druhý join, dostanem informácie buď o kňazovi, alebo o organistovi. Keď nechám obidva joiny, tak ten druhý akoby prepísal ten prvý a dostanem tak iba údaje o organistovi, ktoré akoby prepísali údaje o kňazovi. Škoda, že to tu teraz nemám po ruke, včera som to chcel dať na git, ale som zabudol

Nahoru Odpovědět 20. října 6:39
Radšej 15 minút skôr, ako 15 sekúnd neskoro...
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.