優先順位を決めて、ランダムに選ぶ方法

このQ&Aのポイント
  • MySQLバージョン4.1.16を使用している場合、priorityが指定されたテーブルでランダムに選びたい場合は、次のSQL文を使用します。
  • テーブル「users」の中から、flagが1でかつpriorityが指定された順番の行をランダムに選択するためには、以下のSQL文を使用します。
  • このSQL文は、優先順位を持つテーブルからflagが1の行を条件に合わせてランダムに選ぶ方法を示しています。
回答を見る
  • ベストアンサー

優先順位を決めて、そこからランダムに選んでいく方法

MySQLバージョン4.1.16を使用しています。 次のような、priority(1が最も優先順位が高い)を カラムに持つテーブル「users」で、flagが1を条件として priorityが1から順番にランダムに1つだけ選びたいのです。 つまりこの場合、初めは priorityが1の「bbbb」行と「dddd」行からランダムに選ぶのですが、 flagが共に0なので条件に合わないので選ぶことはできません。 次に、priorityが2の「cccc」「eeee」「ffff」行のflagを調べて flagが1の「cccc」「ffff」行の2つからランダムに選ぶことになります。 このようなSQL文はどのような記述になるのでしょうか? テーブル「users」 +----------+---------+---------+ |  user_id  | priority |   flag  | +----------+---------+---------+ |  aaaa   |   3   |   1   | +----------+---------+---------+ |  bbbb   |   1   |   0   | +----------+---------+---------+ |  cccc   |   2   |   1   | +----------+---------+---------+ |  dddd   |   1   |   0   | +----------+---------+---------+ |  eeee   |   2   |   0   | +----------+---------+---------+ |  ffff    |   2   |   1   | +----------+---------+---------+

  • MySQL
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • masa6272
  • ベストアンサー率66% (93/140)
回答No.1

4.1はサブクエリー使えましたよね。 こんなんでどうでしょう。 SELECT RAND() AS r, user_id FROM (SELECT user_id FROM users WHERE priority = (SELECT MIN(priority) FROM users WHERE flag = 1)) AS a ORDER BY r LIMIT 1;

takagoo100
質問者

お礼

ご返答ありがとうございます。 そのやり方を試してみてできました。 ありがとうございます。

関連するQ&A

  • access で 方法を教えてください。

    access で 方法を教えてください。 テーブルは セミコロン区切りで、区切られて表示されています (テーブル例)  1 aaaa;bbbb;cccc;dddd;eeee;ffff 2000byte 2 aaaa 300byte 3 bbbb;cccc;ffff 3000byte 4 ffff;dddd 120byte このセミコロン区切りの区切られたデータの 「件数」と「バイト」を表で表示させる方法を教えて欲しいのです。 上記テーブル例を使用しての(抽出例)  抽出条件    ↓   aaaa 2件 2500byte   bbbb 2件 5000byte  cccc 2件 5000byte   dddd 2件 2120byte   eeee 1件 2000byte   ffff 3件 5120byte 宜しくお願いします。

  • SQLの書き方について教えてください。

    accessについて。 シートの中に列名name、列名friendnameがあります。 name,friendname aaaa,bbbb bbbb,cccc cccc,aaaa dddd,aaaa eeee,bbbb ffff,eeee ほしいデータは aaaa,bbbb,cccc bbbb,cccc,aaaa cccc,aaaa,bbbb dddd,aaaa,bbbb eeee,bbbb,cccc ffff,eeee,bbbb と友達の友達の名前がほしいのです。 SQLの書き方を教えてください。 よろしくお願いします。

  • UNIXで文字列分割

    UNIXでマルチバイトの文字列で分割したいです。 例) aaaa bbbb cccc dddd eeee ffff ↓ [bbbb]で分割 [1]aaaa [2] cccc dddd eeee ffff できればawkで処理をしたいと考えています。

  • SQLでの集計

    下記の様に、「複数のitemを買っているuserと購入されたitem」のテーブルと、 user item ---------------------------------- 田中 AAAA 田中 CCCC 田中 EEEE 北野 DDDD 北野 BBBB 北野 AAAA 小堺 CCCC 小堺 EEEE 松本 EEEE 松本 KKKK 松本 CCCC 松本 DDDD 浜田 BBBB 浜田 DDDD 下記の様な IDに紐付いた 「item」のテーブルから、 ID  item ---------------------------------- 1   AAAA 2   BBBB 3   CCCC 4   DDDD 5   EEEE 下記の様に各itemと各itemを買った場合に一緒に買われるitemの一覧を結果 として表示させたいのですが、クエリの作り方が思い浮かばず、困っています。 ※)可能であれば、買われたitemを表示する際にはbuy1から(左側から)同時購入 回数の多いitemを重複せずに並べて表示したい ID  item  buy1  buy3  buy4  buy5  buy6・・・・ ---------------------------------- 1  AAAA CCCC BBBB DDDD EEEE 2  BBBB DDDD AAAA 3  CCCC AAAA EEEE DDDD KKKKK 4  DDDD AAAA BBBB CCCC EEEE 5  EEEE AAAA CCCC KKKKK 尚、IDと紐付いているitem数は決まっていますが、買われるitemの種類は上記 の様にIDが1~5だけではなく、集計してみないと判らない状況です。 今の所、SQLはACCESS(2003)上にて手打ちしています。 以上、ご教示のほど、宜しくお願い致します。

  • エクセルで教えて下さい。

    エクセルで教えて下さい。 オートフィルタ、ピボットテーブル以外で関数などで教えて下さい。 A列に大量の文字列があり重複したりしてます。 そこで、 B列にはA列にある大量の文字列を重複なしで表示させたいと思ってます。 例えば A列 B列 AAAA AAAA BBBB BBBB AAAA CCCC CCCC DDDD DDDD EEEE DDDD FFFF EEEE FFFF EEEE AAAA みたいな感じです。A列は編集可能でQQQQを追加すれば自動でB列にも表示させたいです。 このようなことを簡単にできますでしょうか? 宜しくお願いします。

  • wordの段落を通番で振りなおしたい

    word2003で段落を設定した文書があるんですが、番号を振りなおしてつけているため、以下のようになっております。 1.aaaa 2.bbbb 3.cccc 1.dddd 2.eeee 1.ffff 2.gggg 3.hhhh これを以下のような通しの段落番号に変換することは可能でしょうか? 1.aaaa 2.bbbb 3.cccc 4.dddd 5.eeee 6.ffff 7.gggg 8.hhhh 各段落の1.を”自動的に番号を振る”を選択すればできると思いますが、数が多いため簡単な方法を探しております。 よろしくお願いいたします。

  • Excel チェックボックスのコピー、チェックをONにすると対象セルの文字の色が変わる方法

    下記の様にチェックボックス1をONにするとチェックのみ、チェックボックス2をONにすると対象セル(3つのセルAAAA、BBBB、CCCC)の文字の色が変わる様にしたいのですが、どうするのが早く、多く複製出来る方法はありませんか? 個々にチェックボックスを作成して、条件付書式などで作成は可能ですが、下記の様(DDDD、EEEE、FFFF・・・・)に複数作りたいので条件付書式では大変なので何か方法はありませんか。 VBAで作ると楽にいけると思うのですが知識不足で・・・。 ご教授願います。宜しくお願いします。 AAAA    BBBB  1□  2□ CCCC DDDD EEEE  1□  2□ FFFF ・ ・    1□  2□ ・ ・ ・    1□  2□ ・

  • Access Union について

    下記2テーブルがあります。 テーブル1 品番   1月合計 AAAA   1111 BBBB   2222 CCCC   1122 EEEE   3211 テーブル2 品番   2月合計 AAAA   1211 BBBB   3222 CCCC   1522 DDDD   2223 UNIONのSQL文で下記のような結果を得たいです。 品番   1月合計  2月合計 AAAA   1111    1211 BBBB   2222    3222 CCCC   1122    1522 DDDD         2223 EEEE   3211 SQL文をどのように書いたらいいですか。ご教授,お願い致します。

  • 用意したセルをランダムに差し込んでいく

    シート名『差し込むセル』に用意したセルをA列に並べています。(数十個) その用意したセルを、別シートの指定した語句があるセルの下に差し込んでいきたいです。 『指定した語句』は、 </h2> です。 別シート:A列24行以降のセルに</h2>があればその下に、 用意したセルをランダムに差し込んでいきたいです。 (別シートのA列24行~の横にずっと続いているので、それらにもランダムに差し込んでいきたいです) シート名『差し込むセル』 A列: AAAA BBBB CCCC DDDD EEEE FFFF GGGG 別シート A列24行以降のセル(B列24行以降~のセル) </h2> ああああ いいいい うううう </h2> ええええ おおおお かかかか きききき </h2> くくくく けけけけ </h2> ここここ シート名『差し込むセル』のA列のセルを </h2>の下に、ランダムに差し込んでいく ↓ </h2> BBBB ああああ いいいい うううう </h2> FFFF ええええ おおおお かかかか きききき </h2> AAAA くくくく けけけけ </h2> CCCC ここここ というように、差し込んでいきたいです。 ※ランダムに差し込むセルは被りなし これは、どのような記述でできるようになるでしょうか? よろしくお願いいたします。

  • VBScript(vbs)での行の取得について

    あるテキストの中に空行をはさんで文字列がある時に"ABCD"の文字列を含む場合はABCDを含むひとまとまりだけを取得したいのですがその方法について教えてください。 [テキスト] AAAA BBBB CCCC DDDD EEEE ABCD FFFF GGGG HHHH [取得したい部分] DDDD EEEE ABCD FFFF