我试图在mysql中模拟post upvots和posts。目前我有一个帖子元素表和一个upvots喜欢表,结构如下。
喜欢(id,elementid,googleid)
元素(id、googleid、title、body、type)
我有一个url路由,它要么返回最新的帖子,要么返回根据某个参数获得最多支持票的帖子。我想查询一组帖子,每个帖子都列出了他们有多少支持票。网站不会显示谁投了赞成票,但数据库应该跟踪这一点,以防止多次赞成票。
我试着做一些事情,比如:
SELECT elements.id, elements.googleID, elements.title, likes.id, likes.elementID
FROM elements
INNER JOIN likes
ON elements.id=likes.elementID
这样做效果不好。
我怎样才能得到一组帖子,每个帖子都显示了当upvots存储在一个单独的表中时它们拥有多少upvots?
最佳答案
我想查询一组帖子,每个帖子都列出了多少张赞成票
他们有。
您可以尝试此查询。我用了LEFT JOIN
所以你仍然可以得到不喜欢的帖子。
SELECT E.id
, E.googleID
, E.title
, L.likeCount
FROM elements E
LEFT JOIN (
SELECT elementId
, COUNT(id) AS likeCount
FROM likes
GROUP BY elementId
) L ON L.elementId = E.id
或者(不确定它是否能在
MySQL
中正常运行)SELECT E.id
, E.googleID
, E.title
, COUNT(L.id)
FROM elements E
LEFT JOIN likes L ON L.elementID = E.id
GROUP BY E.id
网站不会显示谁投票,但是数据库应该保存
跟踪此以防止多次投票
您可以在
UNIQUE CONSTRAINT
表中为LIKES
和elementID
列创建googleID
。这将确保googleID
只能喜欢一个elementID
。否则,它将抛出唯一的约束冲突。这样,当用户在一个帖子上投票时,如果用户在插入一个表之前已经在
LIKES
表中已有一个记录,则可以先检查数据库。