Database explorer joinWhere a alias připojované tabulky
- Nax
- Člen | 35
Zdravím,
snažím se použít Nette Database Explorer pro joinnování.
Mám tabulku contract, tabulku contracting_party (smluvní strana) a pak M:N tabulku contracting_party_contract, která mimo toho že propojuje kontrakt se smluvní stranou drží informaci zda-li se jedná o jednu smluvní stranu či o druhou.
Potřebuju udělat select který mi připojí ke každému kontraktu jeho zadavatele a i dodavatele (2 smluvní strany). Čili tabulku contracting_party potřebuju připojit 2×, jednou pod názvem dodavatel a porduhé pod názvem zadavatel, podle parametru side_type (0, 1) který se nachází v joinovací tabulce contracting_party_contract. Na to si však musím při joinnování tabulku oaliasovat a nepřišel jsem na to jak se to při joinWhere dělá.
Zkoušel jsem něco jako:
$this->db->table('contract')
->joinWhere("contracting_party_contract AS contractors_join", "contracting_party_contract.contract_id = contract.id")
->joinWhere("contracting_party AS contractors", "contractors_join.contracting_party_id = contractors.id");
(připojoval jsem jen zatím jednu smluvní stranu ale bez úspěchu)
Lze toto nějak provést?
Díky
- Nax
- Člen | 35
Takto bych chtěl aby vypadal vygenerovaný select cca.
$this->db->query("
SELECT contract.*,
GROUP_CONCAT(DISTINCT contractor.name SEPARATOR ', ') AS contractor_name,
GROUP_CONCAT(DISTINCT contracting_authority.name SEPARATOR ', ') AS contracting_authority_name
FROM contract
LEFT JOIN contracting_party_contract contractor_join ON(contractor_join.contract_id = contract.id AND contractor_join.contracting_side = 0)
LEFT JOIN contracting_party contractor ON(contractor_join.contracting_party_id = contractor.id)
LEFT JOIN contracting_party_contract contracting_authority_join ON(contracting_authority_join.contract_id = contract.id AND contracting_authority_join.contracting_side = 1)
LEFT JOIN contracting_party contracting_authority ON(contracting_authority_join.contracting_party_id = contracting_authority.id)
GROUP BY contract.id
")->fetchAll()