0

我有 3 张桌子。user_sticker保留所有在用户之间发送的贴纸。加载配置文件视图屏幕时,我需要显示给用户的最常见的贴纸。

用户

  • id_user
  • 姓名

贴纸

  • id_sticker
  • 姓名

用户贴纸

  • id_user_sticker
  • id_sticker
  • 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

这将是选择:

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

现在有了用户的信息:加入

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 回答
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"

现在,选择第一个

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 回答
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 fiddle 链接:http ://sqlfiddle.com/#!2/e02ca/6/0

于 2013-08-14T01:57:30.623 回答