在文章列表中高效显示用户点赞状态
本文将介绍如何在文章列表查询中,快速获取当前用户对每篇文章的点赞状态,并以清晰的数据格式返回结果。
问题描述:
如何设计一个高效的查询语句,在文章列表中显示当前用户是否已点赞每篇文章?
数据库表结构:
假设我们有以下三个数据库表:
- article: id (文章ID), title (文章标题), context (文章内容), star (点赞数)
- user: id (用户ID), name (用户名), img (用户头像)
- like: article_id (文章ID), user_id (用户ID)
现有查询语句 (示例):
以下是一个简单的文章列表查询语句,但缺少点赞状态信息:
SELECT a.id, a.title, a.context, a.star, u.name, u.img FROM article a INNER JOIN user u ON a.author_id = u.id ORDER BY a.star DESC LIMIT 20;
解决方案:
为了在查询结果中包含点赞状态,我们可以使用以下SQL语句:
SELECT a.id, a.title, a.context, a.star, u.name, u.img, IFNULL(l.user_id, 0) AS is_liked -- 0表示未点赞,非0表示已点赞 FROM article a LEFT JOIN user u ON a.author_id = u.id LEFT JOIN `like` l ON a.id = l.article_id AND l.user_id = #{userId} -- #{userId} 代表当前用户ID ORDER BY a.star DESC LIMIT 20;
详细解释:
-
LEFT JOIN: 使用LEFT JOIN连接article表和user表,确保所有文章都包含在结果中,即使没有作者信息。同样,使用LEFT JOIN连接like表,即使文章没有被当前用户点赞,也能返回结果。
-
条件判断: l.user_id = #{userId} 这个条件确保只返回当前用户点赞的文章的like表记录。
-
IFNULL: IFNULL(l.user_id, 0) 如果l.user_id为空(表示未点赞),则返回0;否则返回l.user_id (表示已点赞)。 is_liked字段的值为0或非0,方便判断点赞状态。
-
#{userId}: 这是一个占位符,代表当前登录用户的ID,需要根据实际情况替换成具体的用户ID。
这个改进后的查询语句能够高效地返回文章列表,并包含每个文章的点赞状态,方便前端展示。 它避免了复杂的子查询,提高了查询效率。
以上就是如何高效查询文章列表并显示用户点赞状态?的详细内容,更多请关注资源网其它相关文章!
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。