Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL UNION 2 заявки, съдържащи ORDER BY

Това е вашето решение:

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

Промените, които направих, са:

  1. всяка от вашите заявки, които са част от UNION, трябва да бъде затворена в скоби (показани с удебелен шрифт за първата заявка; втората вече е затворена)
  2. премахна псевдонима profile3 за вашата 2-ра заявка
  3. за крайния ORDER BY RAND() , трябва да създадете UNION набора от резултати към извлечена таблица; Дал съм му TEMP като псевдоним

Не съм тествал горната заявка, но се надявам да работи. Кажете ми вашите констатации.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Автоматично подрязване на струните до правилната дължина при вложката

  2. Недефинирано свойство:Illuminate\Database\Eloquent\Collection::Laravel 5.2

  3. MySQLdb на Python не може да намери libmysqlclient.dylib с Homebrewed MySQL

  4. Как мога да използвам транзакции в моята MySQL съхранена процедура?

  5. Намерете позицията на текста, извлечете текст и вмъкнете в нова колона в MySQL