Mysql
 sql >> Base de données >  >> RDS >> Mysql

SELECT parmi deux tables basées sur le même identifiant et regroupées

Un union conviendrait à votre problème. Certains massages de données sont nécessaires pour donner aux deux côtés de l'union le même nombre et le même type de colonnes :

select  group_id
,       id as item_id
,       name
,       description
,       source_table
from    (
        select  id
        ,       user_id
        ,       group_id
        ,       name
        ,       description
        ,       'from table1' source_table
        from    table1
        union all
        select  id
        ,       user_id
        ,       group_id
        ,       name
        ,       description
        ,       'from table2'  -- Column name is already defined above
        from    table2
        ) as SubQueriesMustBeNamed
where   user_id = 1
order by
        group_id
,       name

Exemple de travail chez SQL Fiddle.

Pour formater le jeu de résultats comme vous le souhaitez, parcourez le jeu de résultats. Lorsque le group_id modifications, imprimez un # Group N # en-tête.

Il ne devrait pas être nécessaire d'avoir d'autres boucles ou itérations côté client, juste un foreach ou équivalent sur l'ensemble des lignes renvoyées par la requête.