2

次の表を検討してください。

tweets
-----------------------
id  tweet         class
-----------------------
1   Foo bar baz!  2
2   Lorem ipsum   2
3   Foobar lorem  3
4   Activi set    1
5   Baz baz bar?  3
7   Dolor mez foo 3
8   Samet set bar 1

実際には、テーブルには600,000レコードがありますが、テーブルの例に示されているように、一部idのレコードが削除されています(したがって、最高値id> 600,000)。 、またはのclassいずれかになります。123

1200ツイート、それぞれ400ツイートをランダムに選択する必要がありますclass。これは1つのクエリで実行できますか?

4

1 に答える 1

6

(3)の可能な値の数が有限である場合、それぞれが独自のクエリと:を持つclass一連のクエリを使用して簡単に実行できます。UNIONORDER BY RAND()LIMIT 400

(SELECT id, tweet, class FROM tweets WHERE class = 1 ORDER BY RAND() LIMIT 400)
UNION
(SELECT id, tweet, class FROM tweets WHERE class = 2 ORDER BY RAND() LIMIT 400)
UNION
(SELECT id, tweet, class FROM tweets WHERE class = 3 ORDER BY RAND() LIMIT 400)

各グループにORDER BY適用するには、グループをで囲む必要があります。UNION()

于 2012-07-21T20:47:23.057 に答える