Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Dvojitý join do jednej tabuľky

Aktivity
Avatar
Lava
Člen
Avatar
Lava:19.10.2016 22:34

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.10.2016 22:34
Aspartám, sacharín, to je môj vitamín
Avatar
Vlado Cukalovsky:19.10.2016 23:09

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.10.2016 23:10
 
Nahoru Odpovědět
19.10.2016 23:09
Avatar
Lava
Člen
Avatar
Lava:20.10.2016 6:39

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.10.2016 6:39
Aspartám, sacharín, to je môj vitamín
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.