我试图在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表中为LIKESelementID列创建googleID。这将确保googleID只能喜欢一个elementID。否则,它将抛出唯一的约束冲突。
这样,当用户在一个帖子上投票时,如果用户在插入一个表之前已经在LIKES表中已有一个记录,则可以先检查数据库。

10-08 02:01