sql >> Database teknologi >  >> RDS >> Mysql

MySQL UNION 2-forespørgsler, der indeholder ORDER BYs

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

De ændringer, jeg har foretaget, er:

  1. hver af dine forespørgsler, der er en del af UNION, skal være indkapslet i parentes (vist med fed skrift for den første forespørgsel; den anden er allerede indkapslet)
  2. fjernede aliasset profile3 til din 2. forespørgsel
  3. for den endelige ORDER BY RAND() , skal du oprette UNION-resultatsættet til en afledt tabel; Jeg har givet den TEMP som alias

Jeg har ikke testet ovenstående forespørgsel, men jeg håber det skulle virke. Fortæl mig dine resultater.



  1. Hvordan TIMESTAMP() virker i MariaDB

  2. problem med utf8 i java

  3. Er der en bedste måde at undgå udførelse af processen mere end én gang i Oracle?

  4. Sådan får du database-metadata