sql >> Databasteknik >  >> RDS >> Mysql

MySQL UNION 2-frågor som innehåller ORDER BYs

Det här är din lösning:

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();

Ändringarna som jag har gjort är:

  1. var och en av dina frågor som är en del av UNION ska stå inom parentes (visas i fet stil för den första frågan, den andra är redan inkapslad)
  2. tog bort aliaset profile3 för din andra fråga
  3. för den sista ORDER BY RAND() , måste du skapa UNION-resultatuppsättningen till en härledd tabell; Jag har gett den TEMP som alias

Jag har inte testat ovanstående fråga men jag hoppas att det ska fungera. Låt mig veta dina resultat.



  1. Begränsa en SQL Server-anslutning till en specifik IP-adress

  2. Hur ändrar jag en MySQL-tabell till UTF-8?

  3. Kalendertabell för Data Warehouse

  4. Spara kreditkortsinformation i MySQL-databasen?