MYSQL - 创建一个临时列,指示是否回答问题

时间:2012-11-28 15:41:25

标签: mysql

您好我正在开发一种测验应用程序。在“发现”部分,我会得到热门和最新的问题。但是当我得到它们时,我还应该检查当前用户是否已经回答了问题。

这是我的表格: 问题:(media_id是主键,player_id是问题的创建者)

media_id - player_id - answer0 - answer1 - ...

答案:( media_id是主键,player_id是回答问题的人)

media_id - player_id - result - ...

这就是我如此热门的问题:

select * from questions where order by popularity_count

修改 让我通过例子展示我想要实现的目标:

问题行:

media_id - player_id - answer0 - answer1
0123456    abc123      bla       bla
6543210    hjk789      lor       ips

回答行:

media_id - player_id - result
6543210    abc123      1

因此,当用户“abc123”获得热门问题时,结果应为:

media_id - player_id - answer0 - answer1 - is_answered
0123456    abc123      bla       bla       0
6543210    hjk789      lor       ips       1

问题是我在查询结果中需要一个临时列,指示当前用户是否回复了问题。我怎样才能做到这一点?

我可以通过使用两个查询找到问题是否已经回答了流行度部分。首先,我得到了流行的问题,然后我只是检查问题是否得到回答,因为每个问题看起来都是无效的。如何只用一个查询来实现这个目标?

谢谢!

1 个答案:

答案 0 :(得分:0)

由于您具有非规范化的表结构,似乎您没有正确接近此问题。

您应该有一个单独的表,其中包含按行排列的答案。

问题(id,media_id,player_id,问题)

回答(id,media_id,player_id,question_id,answer)

这样您就可以LEFT JOIN answersquestions轻松查看哪些问题没有得到解答:

SELECT q.question, a.answer
FROM question q
LEFT JOIN answers a ON a.question_id = q.id
  AND a.media_id = q.media_id
  AND a.player_id = q.player_id

See it in action

要在当前查询中添加列,您可以将其附加到SELECT并使用CASE语句检查是否已回答。

SELECT ..., 
    CASE
        WHEN answer0 IS NOT NULL
            THEN 'Yes'
        ELSE 'No'
    END AS 'Answered'
FROM ...

<强>更新

根据您的更新,您似乎只JOIN player_id。我相信您打算JOINplayer_id media_id。查看data you providedwhat I think you intend it to be之间的差异。