Un union
sarebbe adatto al tuo problema. È necessaria una modifica dei dati per assegnare a entrambi i lati dell'unione lo stesso numero e lo stesso tipo di colonne:
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
Esempio funzionante su SQL Fiddle.
Per formattare il set di risultati come preferisci, scorrere il set di risultati. Quando il group_id
modifiche, stampa un # Group N #
intestazione.
Non dovrebbe essere necessario avere altri loop o iterazioni lato client, solo un foreach
o equivalente sull'insieme di righe restituite dalla query.