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

Junte duas tabelas e, em seguida, ordenar por data, MAS combinando as duas tabelas


Se as colunas de ambas as tabelas forem iguais, você pode usar um UNION
SELECT X.*
  FROM ( SELECT `id`,
                `userID`,
                 'INVOICE' AS PTYPE
                 `amount`,
                 `date`
            FROM `invoices`
           WHERE {$userID} = userID  
          UNION
          SELECT `id`,
                 `userID`,
                 'PAYMENT' AS PTYPE
                 `amount`,
                 `date`
            FROM `payments`
           WHERE {$userID} = userID  
        ) X
 ORDER BY X.`date`

EDITAR

Leia a seção relevante do manual MySQL em UNIÕES. Existem outras maneiras de expressar isso, mas este é o meu estilo preferido - deve ficar claro para qualquer um que esteja lendo que a cláusula ORDER BY se aplica ao resultado de ambos lados da UNIÃO. Uma UNION escrita descuidadamente - mesmo com ORDER BY - ainda pode deixar o resultado final em ordem indeterminada.

O objetivo do PTYPE é que esta consulta retorne uma coluna extra chamada PTYPE, que indica se cada linha individual é uma FATURA ou um PAGAMENTO... ou seja. de qual das duas tabelas ele vem. Não é obrigatório, mas muitas vezes pode ser útil dentro de um sindicato