web-dev-qa-db-fra.com

API pour Union All dans la requête JDatabase

Quelqu'un peut-il m'indiquer comment utiliser Union All dans JDatabase Query? Merci, mike

2
Mike H

N'oubliez jamais de consulter l'API Joomla si vous ne trouvez rien dans la documentation. UnionAll est mentionné ici:

http://api.joomla.org/cms-3/classes/JDatabaseQuery.html#method_unionAll

0
Lodder

Et n'oubliez pas Joomla! Docs :)

http://docs.joomla.org/Using_the_union_methods_in_database_queries

Voici un exemple tiré de la documentation.

Supposons que vous souhaitiez envoyer le courrier à tous les clients et à tous les fournisseurs et que les noms et les adresses électroniques soient stockés dans des tables appelées, sans surprise, clients et fournisseurs, respectivement.

Cette requête récupérera toutes les informations client nécessaires au mailing:

$query
    ->select('name, email')
    ->from('customers')
    ;
$mailshot = $db->setQuery($query)->loadObjectList();

alors que cette requête fera la même chose pour tous les fournisseurs:

$query
    ->select('name, email')
    ->from('suppliers')
    ;
$mailshot = $db->setQuery($query)->loadObjectList();

Ensuite, vous pouvez combiner les résultats en une requête unique, comme ceci:

$query
    ->select('name, email')
    ->from('customers')
    ->union($q2->select('name , email')->from('suppliers'))
    ;
$mailshot = $db->setQuery($query)->loadObjectList();

Le jeu de résultats obtenu à partir de la requête d'union sera en réalité légèrement différent de l'exécution des requêtes individuelles séparément, car la requête d'union éliminera automatiquement les doublons. Si cela ne vous dérange pas que le jeu de résultats puisse contenir des doublons (ce qui, mathématiquement, signifie que ce n'est pas un jeu), utiliser unionAll à la place de union améliorera les performances.

2
Dmitry Rekun