web-dev-qa-db-fra.com

Deux à gauche rejoignent une requête dans la base de données Joomla

J'ai deux tables: #__records et #__parents. Dans la première table, certains enregistrements peuvent avoir des enregistrements parents stockés dans la même table, mais les relations entre enfants et parents sont stockées dans la seconde table. Par exemple

#__ enregistrements:

id  name
1   Child1
2   Child2
3   Parent1

#__ parents

id  child parent
1     2    3
2     1    3

Maintenant, j'ai la requête:

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

Il renvoie les noms des enregistrements (a.name) mais avec les identifiants des parents (b.parent). J'ai besoin de la deuxième "jointure à gauche" ou d'un autre moyen d'obtenir les noms des parents au lieu de leurs identifiants. Quelque chose comme:

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;

Vous pouvez certainement faire plusieurs jointures à gauche. Il suffit d’aliaser la table avec un alias différent ("c" dans ce cas), puis de sélectionner alias les colonnes, elles ne sont pas identiques à ce que vous extrayez pour l’enfant.

8
David Fritsch

si vous avez besoin de faire des connexions "plusieurs à plusieurs", mieux vaut attraper les tableaux A et B en php, puis les opérateurs, mais si vous n'avez besoin que si A table i par rapport à C basé sur B table, la réponse supérieure est bonne; )

0
Lanah