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