MySQL数据库设计,获取点赞的人数

dashixionglihai
  • 436

有三个表

document 文档表
ding 中间表 有两个字段一个是文档id 一个是会员id
member 会员表

如果在单个文档获取点赞的会员列表,非常简单。但是如果在文档列表里面显示点赞的会员列表该怎么写sql语句呢?

我用是yii2框架,我现在的思路是先获取十条文档数据提取里面的id,然后到ding模型中使用with获取到uid,不过这个时候只是uid,并没有用户的信息,昵称头像什么的,我想再获取头像信息。那么我就想直接用for循环循环这十条数据,获取用户的信息,然后再分配到数组里面。不过这样好像很麻烦啊。

回复
阅读 4.8k
3 个回答
南北
  • 198
✓ 已被采纳

楼主的在for循环中在去member表中查询用户的具体信息(头像,昵称之类)做法不可取。可以向楼上说的那样,在关联表中存入文档id和会员id的同时,存入用户的个人信息(你想取的数据),但是这种方式会带来问题(不灵活。比如我之前只想去会员的昵称。但是我现在想取会员的头像就会很不方便。)
建议做法:依然使用楼主的这种建表方式:
查询语句如下:

SELECT
    a.*, GROUP_CONCAT(m.nickname) as nickname,
    GROUP_CONCAT(m.realname) as realname
FROM
    article a
LEFT JOIN article_member am ON am.article_id = a.id
LEFT JOIN member m ON m.id = am.member_id
GROUP BY
    a.id

可以得到对应的查询结果(每篇文章对应的点赞人数的昵称和真实姓名)
图片描述

点赞的时候,先存到你要查询的表中,取的时候就直接获取就可以了

dashixionglihai
  • 436

如下这样写sql语句,很完美解决。

感谢 @吃雪糕的匹诺曹

select c.id,group_concat(m.nickname),group_concat(m.avatar) from comment c inner join ding on c.id = ding.cid inner join member m on m.id = ding.uid group by c.id;
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏