sql >> Database >  >> RDS >> Mysql

Twee zoekopdrachten combineren in één

Als de bestaande zoekopdrachten doen wat je wilt/nodig hebt, UNION maakt het vrij eenvoudig om ze te combineren, zoiets als;

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

Merk op dat u hetzelfde aantal/dezelfde volgorde van kolommen uit beide query's moet selecteren om de samenvoeging te laten werken. SELECT * maakt het moeilijk om te verifiëren of/dat dat het geval is. Als



  1. Hoe UUID() werkt in MariaDB

  2. kan ik gehackt worden met deze code?

  3. Aanbevelingen voor routinematige back-up van inhoud

  4. Voeg BIT-waarde in MySQL in met behulp van PDO Prepared Statement