【问题标题】:How to show exact result in 3 table query in sql如何在sql中的3表查询中显示确切结果
【发布时间】:2019-10-29 11:45:05
【问题描述】:

我的sql 命令有问题。我尝试了很多方法来查询这 3 个表。

         post table
===========================
id | username | post | date 

里面有 5 个数据行

    profile table
======================
username | bio | name

里面还有5个数据

     like table
====================
post_id  | username

这个like table里面只有1条数据

这是我为我的简单社交媒体项目设计的数据库。如果我单击like 按钮,post.idusername 将被插入到like table。我想统计like.post_id,以获取每个帖子的点赞数。

我试过了:

SELECT *, COUNT(like.post_id) AS post_like 
FROM like,post,profile 
WHERE post.username=profile.username AND like.post_id=post.id` 

这样做的问题是只能获取一个数据。我想在他的帖子比赛中获取帖子和个人资料以及 post_like 中的 5 个数据。

有人可以帮我解决这个问题吗?

【问题讨论】:

    标签: php sql codeigniter-3


    【解决方案1】:

    永远不要FROM 子句中使用逗号!始终使用正确、明确的 JOIN 语法。

    也就是说,我会使用计数的相关子查询来解决这个问题:

    SELECT p.*, pr.*,
           (SELECT COUNT(*)
            FROM like l
            WHERE l.post_id = p.post_id
           ) AS post_like
    FROM post p JOIN
         profile pr
         ON p.username = pr.id  -- this is really strange
    

    postprofile 上的 JOIN 条件看起来不正确,但我已将其保留。

    相关子查询避免了外部查询中的聚合,这通常是性能赢家。你想要一个关于likes(user_id) 的索引——但无论如何你都会想要它。

    【讨论】:

    • p.* 和 pr.* 是什么意思,我的命令出错了。
    • @RonCajan 。 . .这些是此查询中定义明确的表别名。我认为没有问题。
    • 我使用了这个查询 "SELECT * ,(SELECT COUNT(*) FROM like JOIN post ON like.post_id = post.id) AS post_like FROM post JOIN profile ON post.username = profile.username"它显示了我所有的帖子,但 post_like 显示在每一行。我只想将其显示在带有 id 的帖子中。
    • @RonCajan 。 . .这看起来不像这个答案中的查询。
    • 我修改了答案,因为它返回 sql 错误。 @戈登
    猜你喜欢
    • 2021-02-16
    • 2013-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-02
    • 1970-01-01
    相关资源
    最近更新 更多