sql >> Databáze >  >> RDS >> Mysql

Dotazy MySQL UNION 2 obsahující ORDER BY

Toto je vaše řešení:

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

Změny, které jsem provedl, jsou:

  1. každý z vašich dotazů, které jsou součástí UNION, by měl být uzavřen v hranatých závorkách (u prvního dotazu zobrazeno tučně, u druhého je již uzavřeno)
  2. odstranil alias profile3 pro váš 2. dotaz
  3. pro finální ORDER BY RAND() , musíte vytvořit sadu výsledků UNION k odvozené tabulce; Dal jsem mu TEMP jako alias

Výše uvedený dotaz jsem netestoval, ale doufám, že by měl fungovat. Dejte mi vědět o svých zjištěních.



  1. Jak vložit hodnoty do tabulky s dynamickými sloupci Jdbc/Mysql

  2. Šifrování provozu MySQL ve skriptech

  3. Migrace Laravel (errno:Omezení cizího klíče 150 je nesprávně vytvořeno)

  4. MySQL LEFT JOIN Dotaz s klauzulí WHERE