sql >> Databasteknik >  >> RDS >> Mysql

Slå samman två bord, sedan Beställ efter datum, MEN kombinera båda borden

Om kolumnerna i båda tabellerna är desamma kan du använda en 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`

REDIGERA

Läs det relevanta avsnittet i MySQL-manualen på UNION. Det finns andra sätt att formulera detta på, men detta är min föredragna stil - det borde vara klart för alla som läser att ORDER BY-satsen gäller resultatet av båda UNIONENS sidor. En slarvigt skriven UNION - även med en BESTÄLLNING AV - kan fortfarande lämna slutresultatet i obestämd ordning.

Syftet med PTYPE är att denna fråga returnerar en extra kolumn som kallas PTYPE, som indikerar om varje enskild rad är en FAKTURA eller en BETALNING... dvs. vilken av de två tabellerna den kommer ifrån. Det är inte obligatoriskt, men kan ofta vara användbart inom ett fackförbund



  1. bind_param() endast nödvändig för användarinmatade värden eller alla?

  2. yii-relation för främmande nycklar med flera kolumner

  3. Parameter Sniffing, Inbäddning och ÅTERKOMPILERING

  4. MySQL:Skapa en ny tabell med information från en fråga