Mysql
 sql >> Base de données >  >> RDS >> Mysql

Joindre deux tables, puis Trier par date, MAIS combiner les deux tables

Si les colonnes des deux tables sont identiques, vous pouvez utiliser un 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`

MODIFIER

Lisez la section correspondante du Manuel MySQL sur les SYNDICATS. Il existe d'autres façons de formuler cela, mais c'est mon style préféré - il devrait être clair pour quiconque lit que la clause ORDER BY s'applique au résultat de both côtés de l'UNION. Un UNION écrit négligemment - même avec un ORDER BY - peut toujours laisser le résultat final dans un ordre indéterminé.

Le but du PTYPE est que cette requête renvoie une colonne supplémentaire appelée PTYPE, qui indique si chaque ligne individuelle est une FACTURE ou un PAIEMENT... c'est-à-dire. de laquelle des deux tables il provient. Ce n'est pas obligatoire, mais peut souvent être utile au sein d'un syndicat