Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

MySQL UNION 2 truy vấn có chứa ORDER BYs

Đây là giải pháp của bạn:

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

Những thay đổi mà tôi đã thực hiện là:

  1. mỗi truy vấn của bạn là một phần của UNION phải được đặt trong dấu ngoặc vuông (được in đậm cho truy vấn đầu tiên; truy vấn thứ hai đã được mã hóa)
  2. đã xoá bí danh profile3 cho truy vấn thứ hai của bạn
  3. cho ORDER BY RAND() cuối cùng , bạn phải tạo tập kết quả UNION cho một bảng dẫn xuất; Tôi đã cung cấp cho nó TEMP làm bí danh

Tôi chưa thử nghiệm truy vấn trên nhưng tôi hy vọng nó sẽ hoạt động. Hãy cho tôi biết những phát hiện của bạn.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Đâu là cách tốt nhất để đồng bộ hóa dữ liệu động theo hai hướng trong thời gian thực bằng cách sử dụng mysql

  2. Cột không xác định trong 'mệnh đề có'

  3. Tối ưu hóa Mysql cho REGEXP

  4. Dữ liệu cơ sở dữ liệu truy cập ứng dụng C # windows không tiếp tục đóng

  5. Lỗi trình kết nối MySQL Giá trị múi giờ máy chủ Giờ Trung Âu