2016-10-25 8 views

答えて

-1
SELECT column FROM table WHERE category_id = XXX 
ORDER BY RAND() 
LIMIT 4 

あなたが数行しか持っている場合、SQL文でそれを行うことができ、すべてのカテゴリ

+0

こんにちは。私を助けてくれてありがとう。私も同じことをやっているが、私はすべてのレコードを集めるために問題に直面している。それは、私がこれらのレコードのためにすべての組合を適用することができないことを意味します。 –

+1

(SELECT * hb_quiz_questionからRAND()によってhb1.category_id = 1つの順序は4限定HB1など) 組合が 組合((*選択hb_quiz_questionからRAND()によってhb1.category_id = 2順序が4に制限HB1として) hb1.category_idをRAND()で3回注文する。 ユニオン (select * from hb_quiz_question hb1 where hb1.category_id = 4 order by RAND()limit 4) –

+0

ありがとう。それは今働いている。 –

0

のためにそれを行う:

SELECT id, question, ... FROM x1 ORDER BY rand() LIMIT 1 

をあなたはわずか数行を持っている場合、これが正常に動作します - 何千もの行があるとすぐに行をソートするためのオーバーヘッドが重要になるので、すべての行をソートして1行だけを取得する必要があります。

トリッキーが、よりよい解決策は次のようになります。

SELECT id, question from x1 JOIN (SELECT CEIL(RAND() * (SELECT(MAX(id)) FROM x1)) AS id) as id using(id); 

両方SELECTSにEXPLAIN実行あなたはさまざまなカテゴリのランダムな値が必要な場合は...あなたに

を違いを表示します組合を経由して選択を組み合わせて、 where句

+0

ありがとう@Georg。私は2番目のソリューションから同じことをしようとしますが、私はそれをさせても、2番目のソリューションを実装しようとするだろうので、私はいくつかのレコードがあります。再度、感謝します。 –

0

http://mysql.rjweb.org/doc.php/groupwise_max#top_n_in_each_group

しかし、その後ORDER BY category, RAND()を追加します。 (あなたのcategoryはブログのprovinceです。)

どのように@variablesを使用してカウントするのかに注目してください。

MariaDB 10.2をお持ちの場合は、そのウィンドウ機能の1つを使用してください。