Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Kombinieren von zwei Abfragen zu einer

Wenn die vorhandenen Abfragen das tun, was Sie wollen/brauchen, UNION wird es ziemlich einfach machen, sie zu kombinieren, so etwas wie;

SELECT * FROM (
    SELECT is_private 0, <field1>,<field2>,<field3>, ... ,(SELECT COUNT(*) 
               FROM votes 
               WHERE message_id = m.message_id
                 AND vote_type = 'like') AS likes,
              (SELECT COUNT(*) 
               FROM votes
               WHERE message_id = m.message_id 
               AND vote_type = 'dislike') AS dislikes 
    FROM messages m
    WHERE 1 #and hidden is null
      and recipient_id = 1
    UNION ALL
    SELECT 1, <field1>, <field2>, <field3>, ... ,(SELECT COUNT(*) 
               FROM votes 
               WHERE message_id = m.message_id
                 AND vote_type = 'like') AS likes,
              (SELECT COUNT(*)
               FROM votes
               WHERE message_id = m.message_id  
                 AND vote_type = 'dislike') AS dislikes 
    FROM private_messages m 
    WHERE 1 #and hidden is null 
      and recipient_id = 1 
)
ORDER BY datetime DESC

Beachten Sie, dass Sie dieselbe Anzahl/Reihenfolge von Spalten aus beiden Abfragen auswählen müssen, damit die Vereinigung funktioniert. SELECT * macht es schwer zu überprüfen, ob/dass dies der Fall ist. Wenn