-2

同じIDのテーブルが2つあります。

  • table1 e107_users:user_id、user_name、user_image
  • 表2 e107_extended:user_id、premium、phone

必要なのは、ランダムに選択された5人のユーザーを表示し、プレミアムの場合にのみ表示することです。

---------  ---------  ---------  ---------  ---------
* Phone *  * Phone *  * Phone *  * Phone *  * Phone *
* image *  * image *  * image *  * image *  * image *
* Name  *  * Name  *  * Name  *  * Name  *  * Name  *
*********  *********  *********  *********  *********

user_idを繰り返すべきではないので、クエリで同じユーザーを1回だけ表示します

4

1 に答える 1

2
SELECT * FROM e107_users u 
JOIN e107_extended e ON u.user_id = e.user_id
WHERE premium = 1
ORDER BY RAND()
LIMIT 5

これでうまくいくはずです。ORDER BY RAND()MySQL にランダムにソートするように指示します。つまり、エントリをシャッフルするだけです。そしてLIMIT 5、結果を最初の 5 つのエントリに制限します。ほとんどの場合、これは「最大の 5」、「最小の 5」のようなものですが、ここでは「ランダムなコレクションの最初の 5 つ」、つまり「ランダムな 5」を意味します。

e107_usersuser_id の重複が含まれていないと仮定します。私にはあまり意味がありません。

e107_usersまた、 toe107_extended1:1 の関係であると仮定しましたが、これは異なる場合があります。ただし、あなたの質問はこれに関する十分な情報を提供していません。ID の重複について言及されていますが、どこで発生するのかはわかりません。

1:1 の関係でない場合に備えて、次を使用できますGROUP BY

SELECT * FROM e107_users u 
JOIN e107_extended e ON u.user_id = e.user_id
WHERE premium = 1
GROUP BY u.user_id
ORDER BY RAND()
LIMIT 5

これにより、MySQL は要素をグループ化するために u.user_id (表user_idの ) を使用するようになります。そのため、同じにe107_users複数の要素がある場合は、1 つだけが選択されます)。e107_extendeduser_id

ただし、これはおそらく拡張テーブル内の要素をシャッフルしません。これは、常に同じ電話番号が選択されることを意味します。ただし、名前と画像はシャッフルされます。すべてを完全にシャッフルする方法がわかりません。

于 2013-02-27T23:17:30.447 に答える