2016-05-06 4 views
0

UNION内のORDER BY RAND()にはいくつか問題があります。 UNION内の別個のクエリ内でランダムに注文するようには見えません。ORDER BY RAND()はUNION内では機能しません

サブクエリ1>サブクエリ2>サブクエリ3である必要があるため、クエリ全体を一度に並べることなく、サブクエリを注文したいだけです。

私はNEWID()やUUID()のようなMySQLのいくつかのランダム関数を試しましたが、どちらもうまくいかないようです。

私は結果を得るためにWordPressを使用しています。

SELECT * 
     FROM (
       (SELECT act.wordpress_id, 
         act.title, 
         act.main_image, 
         loc.id, 
         "activities" AS type, 
         loc.town, 
         loc.village 
       FROM tha_wc_activity act 
       INNER JOIN tha_wc_location loc 
       ON act.location_id = loc.id 
       WHERE 
        act.active = 1 AND 
        act.visible_in_activities_overview = 1 AND 
        loc.id = 1 
       ORDER BY RAND() 
       ) 
      UNION 
       (SELECT act.wordpress_id, 
         act.title, 
         act.main_image, 
         loc.id, 
         "activities" AS type, 
         loc.town, 
         loc.village 
       FROM tha_wc_activity act 
       INNER JOIN tha_wc_location loc 
       ON act.location_id = loc.id 
       WHERE 
        act.active = 1 AND 
        act.visible_in_activities_overview = 1 AND 
        loc.village = "villageName" 
       ORDER BY RAND() 
       ) 
      UNION 
       (SELECT act.wordpress_id, 
         act.title, 
         act.main_image, 
         loc.id, 
         "activities" AS type, 
         loc.town, 
         loc.village 
       FROM tha_wc_activity act 
       INNER JOIN tha_wc_location loc 
       ON act.location_id = loc.id 
       WHERE 
        act.active = 1 AND 
        act.visible_in_activities_overview = 1 AND 
        loc.town = "townName" 
       ORDER BY RAND() 
       ) 
      ) AS act 
      WHERE act.wordpress_id != 1 
      LIMIT 0, 15) 

UPDATE:ゴードン・リノフに おかげで、私は非常にわからないんだけど、それが注文した結果に

答えて

1

を取得することはないだろう、私は他の別々のサブクエリに制限を入れていたことが判明あなたの質問は何ですか?サブクエリでorder by rand()を使用していますが、すべての結果を選択しています。すべての行を取得することは、その順序に関係なく、すべての行です。

次に、unionを使用して重複を削除し、その他のロジックも使用しています。

select * 
from (<subquery 1> 
     union 
     <subquery 2> 
     . . . 
    ) t 
where . . . 
order by rand() 
limit 15; 

あなたがlimitを使用しない限り、サブクエリを注文する必要はありません。

はおそらく、あなたはこのような何かをしたいです。

重複を削除するオーバーヘッドを明示的に発生させたくない場合を除き、unionではなくunion allを使用することをお勧めします。

+0

私は各サブクエリを別々に注文し、それらの3つのクエリをまとめて1つのクエリとして返す必要があります。したがって、RANDによる順序は正しくないです。なぜなら、別の順序は無視され、クエリ全体に制限が欲しいからです。 – Rens

+0

@ renzz17。 。 。あなたは 'すべての組合 'をしたいかもしれません。 –

関連する問題