各カテゴリから4つのランダムな値を取得する必要があります。 maria dbの正しいSQL構文は何か。私はテーブル構造の1つのイメージを付けました。maria dbの各カテゴリデータを取得するためのSQL
Please click here to check the structure
私はいくつかの手順を書くべきか、私は基本的なSQL構文でそれを行うことができますか?
各カテゴリから4つのランダムな値を取得する必要があります。 maria dbの正しいSQL構文は何か。私はテーブル構造の1つのイメージを付けました。maria dbの各カテゴリデータを取得するためのSQL
Please click here to check the structure
私はいくつかの手順を書くべきか、私は基本的なSQL構文でそれを行うことができますか?
SELECT column FROM table WHERE category_id = XXX
ORDER BY RAND()
LIMIT 4
あなたが数行しか持っている場合、SQL文でそれを行うことができ、すべてのカテゴリ
のためにそれを行う:
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句
ありがとう@Georg。私は2番目のソリューションから同じことをしようとしますが、私はそれをさせても、2番目のソリューションを実装しようとするだろうので、私はいくつかのレコードがあります。再度、感謝します。 –
http://mysql.rjweb.org/doc.php/groupwise_max#top_n_in_each_group
しかし、その後ORDER BY category, RAND()
を追加します。 (あなたのcategory
はブログのprovince
です。)
どのように@variablesを使用してカウントするのかに注目してください。
MariaDB 10.2をお持ちの場合は、そのウィンドウ機能の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) –
ありがとう。それは今働いている。 –