SQL:如何从单独的表动态计算值?

时间:2018-03-02 01:46:11

标签: sql join inner-join

我正在构建一个黑客新闻风格的页面,我正在尝试从数据库中获取一个帖子列表以显示在页面上,包括关于当前用户是否对特定帖子进行投票的数据

我正在尝试查询posts的列表(来自posts表),我想在votes表上执行联接(post.id on votes)。 postId)查看当前用户是否已对某个帖子进行投票,并为每个回复的帖子返回userHasVoted之类的内容,即时计算。

我一直试图让这种情况发生,但似乎只返回用户投票的帖子。

如何查询数据库以显示每个帖子以及是否由特定用户投票?

这是我的投票表:

+----+--------+--------+-------+
| id | userId | postId | value |
+----+--------+--------+-------+
|  1 |      1 |      1 |     1 |
|  2 |      2 |      1 |     1 |
|  3 |      4 |      3 |     1 |
|  4 |      1 |      5 |     0 |
|  5 |      3 |      2 |     1 |
|  6 |      4 |      8 |     1 |
|  7 |      1 |      8 |     1 |
|  8 |      4 |      9 |     1 |
|  9 |      1 |      9 |     1 |
+----+--------+--------+-------+

这是我的帖子表(省略标题,内容,链接等):

+----+---------------+--------+
| id | publishStatus |authorId|
+----+---------------+--------+
|  1 | PUBLIC        |      1 |
|  2 | PUBLIC        |      2 |
|  3 | PUBLIC        |      3 |
|  4 | PUBLIC        |      4 |
|  5 | PUBLIC        |      2 |
|  6 | PUBLIC        |      1 |
|  7 | PUBLIC        |      1 |
|  8 | PUBLIC        |      1 |
|  9 | PUBLIC        |      1 |
+----+---------------+--------+

2 个答案:

答案 0 :(得分:1)

以下是您可以获得YesNo而不是10

的示例
SELECT DISTINCT p.*, CASE 
        WHEN v.value = 0
            THEN 'No'
        ELSE 'Yes'
        END userHasVoted
FROM posts p
INNER JOIN votes v ON p.id = v.postid

enter image description here

答案 1 :(得分:-2)

选择a.name作为post_name,sum(vote.value)count_of_votes来自 join 投票a.id = vote.postid group by name

---------------------------- - 查找特定帖子的所有用户的总投票数 < / p>