0

私は3つのテーブルを持っています。はuser_sticker、ユーザー間で送信されたすべてのステッカーを保持します。プロファイル ビュー画面が読み込まれると、ユーザーに与えられた最も一般的なステッカーを表示する必要があります。

ユーザー

  • id_user
  • 名前

ステッカー

  • id_ステッカー
  • 名前

ユーザーステッカー

  • id_user_sticker
  • id_ステッカー
  • id_user_from
  • id_user_to

したがって、user_stickerこの情報を保持している場合:

  • 1、3、254、205
  • 2、2、362、205
  • 3、2、519、205
  • 4、3、945、205
  • 5、3、199、205

(これは、ユーザー 254、362、519、945、199 がユーザー 205 にステッカーを送信したことを意味します)。結果は、同じレコードでユーザー 205 情報 (名前) と最も一般的なステッカー ID (この場合は #3) の両方を返す必要があります。

4

3 に答える 3

1

わかりました、見てみましょう

原則として、user_sticker テーブルを使用する必要があります。そう:

SELECT *
FROM user_sticker us

次に、user_to のユーザー テーブルと照合します。

SELECT *
FROM user_sticker us JOIN user u ON us.id_user_to = u.id_user

次に、受け取りたいユーザーの名前とステッカーが必要です

SELECT us.id_sticker, u.name
FROM user_sticker us JOIN user u ON us.id_user_to = u.id_user
WHERE u.id_user = "yourwanteduser"

さぁ、1番を選んで

SELECT TOP 1 us.id_sticker, u.name
FROM user_sticker us JOIN user u ON us.id_user_to = u.id_user
WHERE u.id_user = "yourwanteduser"
ORDER BY (SELECT COUNT(*)
          FROM user_sticker us2
          WHERE us2.id_user_to=u.id_user AND us2.id_sticker=us.id_sticker)

ORDER BY は、そのユーザーに送信されたステッカーの数を検索するために使用されます

私の悪い英語でごめんなさい!これが助けになることを願っています!

于 2013-08-14T03:16:33.880 に答える
1

これは選択になります:

   select id_user_to, count(id_sticker) quant from user_sticker group by id_sticker order by quant desc limit 1;

ユーザーの情報を使用: JOIN

select us.id_user_to, u.name, count(us.id_sticker) quant 
from user_sticker us
join user u on u.id_user=us.id_user_to
group by us.id_sticker 
order by quant desc limit 1;
于 2013-08-14T02:10:32.630 に答える
0
select test.id_sticker, test.id_user_to, name from 
(select s.id_sticker, s.id_user_to
from user_sticker s, user u
group by id_sticker, id_user_to
order by count(*) desc
limit 1) 
as test, user
where test.id_user_to=user.id_user

SQLフィドルリンクを参照してください:http://sqlfiddle.com/#!2/e02ca/6/0

于 2013-08-14T01:57:30.623 に答える