sql >> Database >  >> RDS >> Mysql

MySQL UNION 2-query's met ORDER BY's

Dit is jouw oplossing:

SELECT *
FROM
(
    **(**
        SELECT profileId
        FROM 
        (
            SELECT profileId
            FROM profile profile2
            WHERE profile2.profilePublishDate <= Now()
            ORDER BY profile2.profilePublishDate DESC
            LIMIT 0,40
        ) AS profile1
        ORDER BY RAND()
        LIMIT 0,20
    **)**
    UNION
    (
        SELECT profileId
        FROM profile profile4
        WHERE profileId NOT IN (
            SELECT profileId
            FROM profile profile4
            WHERE profile4.profilePublishDate <= Now()
            ORDER BY profile4.profilePublishDate DESC
            LIMIT 0,40
            )
        ORDER BY RAND()    
        LIMIT 0,40
    )
) TEMP
ORDER BY RAND();

De wijzigingen die ik heb aangebracht zijn:

  1. elk van uw zoekopdrachten die deel uitmaken van UNION moet tussen haakjes staan ​​(vetgedrukt weergegeven voor de eerste zoekopdracht; de tweede is al tussen haakjes weergegeven)
  2. de alias profile3 verwijderd voor je tweede vraag
  3. voor de laatste ORDER BY RAND() , moet u de UNION-resultatenset naar een afgeleide tabel maken; Ik heb het TEMP gegeven als de alias

Ik heb de bovenstaande query niet getest, maar ik hoop dat het zou moeten werken. Laat me je bevindingen weten.



  1. Rails-MySQL-fout - niet-geïnitialiseerde constante MysqlCompat::MysqlRes

  2. C# -- Gegevens ophalen uit MySQL en ze bestellen op pagina's zonder DataGridView

  3. SQL Server - transacties worden teruggedraaid bij fout?

  4. Codeigniter active records query kost te veel tijd om gegevens uit de database te laden