Eu tenho duas tabelas: #__records e #__parents. Na primeira tabela, alguns registros podem ter registros pai que são armazenados na mesma tabela, mas as relações entre filhos e pais são armazenadas na segunda tabela. Por exemplo
#__ registros:
id name
1 Child1
2 Child2
3 Parent1
#__ pais
id child parent
1 2 3
2 1 3
Agora eu tenho a consulta:
$db = JFactory::getDBO();
$query = $db->getQuery(true);
$query->select('a.id, a.name')
->from('#__records as a');
$query->select('b.parent as parentid');
$query->join('LEFT', '#__parents AS b ON b.child = a.id');
$db->setQuery($query);
return $query;
Retorna os nomes dos registros (a.name), mas com os IDs dos pais (b.parent). Preciso da segunda "associação à esquerda" ou de outra maneira de obter os nomes dos pais em vez de seus IDs. Algo como:
select c.name as parentname from #__records as c where c.id=b.parent
$db = JFactory::getDBO();
$query = $db->getQuery(true);
$query->select('a.id, a.name, c.id as parent_id, c.name as parent_name')
->from('#__records as a');
$query->select('b.parent as parentid');
$query->join('LEFT', '#__parents AS b ON b.child = a.id');
$query->join('LEFT', '#__records AS c ON b.parent = c.id');
$db->setQuery($query);
return $query;
Você definitivamente pode fazer várias junções esquerdas. Apenas alias a tabela para um alias diferente ('c' neste caso) e, em seguida, faça com que o select também alias as colunas não sejam iguais ao que você está puxando para a criança.
se você precisar fazer conexões "muitos para muitos", é melhor capturar as tabelas A e B no php e, em seguida, executar os operadores, mas se você precisar apenas se A tabela i em relação a C com base na tabela B, a resposta superior é boa; )