Si las columnas de ambas tablas son iguales, puede usar 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
Lea la sección correspondiente del manual de MySQL en UNIONES. Hay otras formas de expresar esto, pero este es mi estilo preferido:debe quedar claro para cualquiera que lea que la cláusula ORDER BY se aplica al resultado de ambos lados de la UNIÓN. Una UNION escrita descuidadamente, incluso con un ORDEN POR, aún puede dejar el conjunto de resultados final en un orden indeterminado.
El propósito de PTYPE es que esta consulta devuelve una columna adicional llamada PTYPE, que indica si cada fila individual es una FACTURA o un PAGO... es decir. de cuál de las dos tablas proviene. No es obligatorio, pero a menudo puede ser útil dentro de un sindicato