0

以下に質問があります。それを実行すると、単一のメンバーIDごとに複数のレコードが表示されるすべての結果が返されます。

ランダムに選択された 2 人のメンバーのプロファイルを、パフォーマンスの問題なしで選択したいと考えています。

SELECT
  a.memberid,
  a.category_id,
  a.content,
  a.count_cid,
  a.importance
FROM tb_profilingdata a,
  tb_member b
WHERE a.memberid = b.memberid
    AND a.category_id IN($catstr)
    AND a.memberid NOT IN('$mid',$seen)
    AND b.gender = 'male'
ORDER BY a.memberid, a.category_id

このクエリの結果

ランダムなレコードを 1 つ選択するためのクエリをいくつか試しました

SELECT
  r1.memberid
FROM tb_profilingdata AS r1
  JOIN (SELECT
      (RAND() * (SELECT MAX(DISTINCT(memberid)) FROM tb_profilingdata)) AS memberid) AS r2
WHERE r1.memberid >= r2.memberid
ORDER BY r1.memberid ASC
LIMIT 1

しかし、 tb_profilingdataから合計 1 つのレコードを選択しますが、ランダムに選択された 1 つのメンバーのレコードが必要です。

tb_memberで同じクエリを試しましたが、tb_memberに存在するメンバーが tb_profilingdata にエントリを持っていない可能性があります

パフォーマンスの問題を最小限に抑える良い方法を提案してください。

4

2 に答える 2

4

それがあなたを助けるかもしれません:

SELECT [何か] FROM [ソース] WHERE [条件] ORDER BY RAND() LIMIT 2

于 2013-01-30T11:47:47.657 に答える
0

サンプルデータを提供しない限り、このクエリはテストされていません

SELECT
  a.memberid,
  a.category_id,
  a.content,
  a.count_cid,
  a.importance
FROM tb_profilingdata a
  left join (select
           memberid
         from tb_member
         group by memberid
         order by rand()) b
    on a.memberid = b.memberid
WHERE a.category_id IN($catstr)
    AND a.memberid NOT IN('$mid',$seen)
    AND b.gender = 'male'
ORDER BY a.memberid, a.category_id
于 2013-01-30T12:19:03.043 に答える