Mysql
 sql >> Database >  >> RDS >> Mysql

Unisci due tabelle, quindi Ordina per data, MA combinando entrambe le tabelle

Se le colonne di entrambe le tabelle sono uguali, puoi utilizzare 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`

MODIFICA

Leggi la sezione pertinente del manuale MySQL sui SINDACATI. Ci sono altri modi per formularlo, ma questo è il mio stile preferito:dovrebbe essere chiaro a chiunque legga che la clausola ORDER BY si applica al risultato di entrambi parti dell'UNIONE. Una UNION scritta con noncuranza, anche con un ORDER BY, può comunque lasciare il set di risultati finale in ordine indeterminato.

Lo scopo del PTYPE è che questa query restituisca una colonna aggiuntiva chiamata PTYPE, che indica se ogni singola riga è una FATTURA o un PAGAMENTO... es. da quale delle due tabelle proviene. Non è obbligatorio, ma spesso può essere utile all'interno di un sindacato