web-dev-qa-db-pt.com

Dois juntam-se à esquerda em uma consulta ao banco de dados Joomla

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
5
stckvrw
$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.

8
David Fritsch

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; )

0
Lanah