Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

MySQL UNION 2 query yang berisi ORDER BYs

Ini adalah solusi Anda:

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

Perubahan yang saya lakukan adalah:

  1. setiap kueri Anda yang merupakan bagian dari UNION harus terbungkus dalam tanda kurung (ditampilkan dalam huruf tebal untuk kueri pertama; yang kedua sudah terbungkus)
  2. menghapus alias profile3 untuk kueri kedua Anda
  3. untuk ORDER BY RAND() terakhir , Anda harus membuat kumpulan hasil UNION ke tabel turunan; Saya telah memberikannya TEMP sebagai alias

Saya belum menguji kueri di atas tetapi saya harap ini akan berhasil. Beri tahu saya temuan Anda.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menonaktifkan pemeriksaan kunci asing di baris perintah

  2. MySQL - Koneksi persisten vs penyatuan koneksi

  3. Bagaimana cara memeriksa apakah bidang itu nol atau kosong di MySQL?

  4. MySQL:#126 - File kunci salah untuk tabel

  5. VARCHAR sebagai kunci asing/kunci utama dalam database baik atau buruk?