我的sql
命令有问题。我尝试了许多方法来查询这3个表。
post table
===========================
id | username | post | date
内部有5个数据行
profile table
======================
username | bio | name
里面还有5个数据
like table
====================
post_id | username
此表仅包含1个数据
这是我的简单社交媒体项目的数据库设计。如果单击“赞”按钮,则post.id
和username
将插入到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`
问题在于,仅提取一个数据。我想在他的比赛中获取5个数据,这些数据来自post和profile以及post_like。
有人可以帮我解决这个问题吗?
Never在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
JOIN
和post
上的profile
条件看起来不正确,但我将其保留了。
相关子查询避免了外部查询中的聚合,外部查询通常是性能的赢家。您想要likes(user_id)
上的索引-但无论如何您都想要它。