1

私は2つのテーブルを持っています:

ユーザー:

userID | uName | 
-----------------
   1   |  John
   2   |  Bohn
   3   |  Kohn
   4   |  Lohn
   5   |  Zohn
   6   |  Rohn

画像:

imageID | url | userID
----------------------
   1    |  x  |   2
   2    |  x  |   2
   3    |  x  |   1
   4    |  x  |   3
   5    |  x  |   3
   6    |  x  |   3

ご覧のとおり、userID で IMAGES データベースに接続する USER データベースがあります。一意のユーザー行は 1 つだけですが、ユーザーごとに複数の画像が存在する場合があります。

私が欲しいのは、データベースと彼のすべての画像から1 つのランダムなユーザーを取得することです。条件は、ユーザーが画像を持っていない場合は選択しないことです。

それを達成するために1 つのmysql クエリを作成するのを手伝ってもらえますか?

PSユーザーデータが重複していても(画像行が複数あるため)、結果セットにはユーザーが1人しかいません。

4

1 に答える 1

3

まず、INNER JOIN両方のテーブルで、画像を持たないユーザーを除外します。次に、ORDER BY RAND()結果セットをランダム化します。最後に、最初の行を選択して乱数を取得しますuserId

SELECT u.*
FROM user u INNER JOIN images i ON (u.userId = i.userId)
ORDER BY RAND()
LIMIT 1

デモ

EDIT :ランダムなユーザーからすべての画像を選択するには、次を使用します。

SELECT i.*
FROM images i 
     INNER JOIN 
     (SELECT u.userId
      FROM user u INNER JOIN images i ON (u.userId = i.userId)
      ORDER BY RAND()
      LIMIT 1) rand_user 
     ON (i.userId = rand_user.userId);

デモ

于 2012-09-14T23:35:37.407 に答える