• 締切済み

★Mysql 同じ条件で●●から同じ数だけ抽出!

SELECT * FROM `table` WHERE `abc`=1 and `def`=3 and GROUP BY ●● order by rand(); この条件なら、●●が1件ずつ計30件が抽出されます。 が、 私がやりたいのは、●●から3件ずつで、 3×30=90件 抽出したいです。 一文でできるのでしょうか? 初心者ですみません。 よろしくお願いします。

みんなの回答

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.2

「●●の中で「同じ値」を3件ずつランダムに表示したいです。」 同じ値が3件なかったらどうするのですか? 、前にも書きましたが、group by 指定していない項目をSELECT句に書けるのはMySQLのバグのようなものだと私は思っています(意味論的に値が不定になる)。 `Table`の全項目と先の問題(同じ値が3件ない場合はどうするのか)を教えてください。 話の前提を小出しにしても意味がないと思います。

a-----n
質問者

補足

ご連絡ありがとうございます。 初心者なものなので、根本的なことが分かっていなく、申し訳ありません。 同じ値が3件ない場合は2件、2件ない場合は1件、1件ない場合は0件が希望です。 `Table`の全項目・・・id name age abc def よろしくお願いします。

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.1

ユーザー変数を用いると、似た様なことは可能ですが。 SELECT * FROM `TABLE` GROUP BY `●●` のようにGROYP BY指定していない項目をSELECT句に並べるのは、 ・MySQLではエラーにならないが、他のRDBMSではエラーになる ・MySQLでも、GROYP BY指定していない項目の値の保証がない のでこの書き方はNGだと思います。 「●●から3件ずつで、3×30=90件抽出したい」なら、抽出する優先順位をつける条件が必要になりますが、その記述もありません。 補足をお願いします。

a-----n
質問者

補足

ご連絡ありがとうございます。 ●●の中で「同じ値」を3件ずつランダムに表示したいです。 また説明不足で失礼しました。