Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

SELECT de duas tabelas com base no mesmo id e agrupadas


Uma union atenderia ao seu problema. Alguma massagem de dados é necessária para dar a ambos os lados da união o mesmo número e tipo de colunas:
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

Exemplo de trabalho no SQL Fiddle.

Para formatar o conjunto de resultados como desejar, itere sobre o conjunto de resultados. Quando o group_id alterações, imprima um # Group N # cabeçalho.

Não deve haver necessidade de ter outros loops ou iterações do lado do cliente, apenas um foreach ou equivalente sobre o conjunto de linhas retornado pela consulta.