如何对表示具有多个答案的民意调查的两个表使用一个查询?

Posted

技术标签:

【中文标题】如何对表示具有多个答案的民意调查的两个表使用一个查询?【英文标题】:How to use one query for two tables representing a poll with multiple answers? 【发布时间】:2009-04-01 11:39:56 【问题描述】:

我有两个表格 pollpoll_answers,它们代表一个民意调查以及可供选择的选项来回答民意调查中的问题。例如:

我不擅长 SQL 吗?

是的 是的,你会的 改变工艺

以及对应的表格:

投票

pollID pollQuestion

 1 | Am I poor at SQL?

poll_answers

pollAnswerID pollAnswerText pollID

  1 | yes | 1

  2 | yes, you do | 1

  3 | change craft | 1

这就是我获取数据的方式:

$polls=$db->get_results("SELECT pollID, pollQuestion FROM poll",ARRAY_A);
    foreach ($polls as $poll_field)
    
        $poll['id']=$poll_field['pollID'];
        $poll['question']=$poll_field['pollQuestion'];
        $tmp=$poll['id'];
        //answers
        $answers=$db->get_results("SELECT pollAnswerID, pollAnswerText FROM poll_answers WHERE pollID='$tmp'",ARRAY_A);
            
            //and so on , I think you get the idea.
            


    

这对我来说看起来很笨拙,因为我认为可以在 ID 匹配上使用 INNER JOIN 仅通过一个 SQL 查询来获取数据......我就是做不到。你能帮我吗?请记住,我的数据库中有多个民意调查。


编辑:感谢您到目前为止的回答。我很感激帮助。但是我没有很好地解释这个问题。是否有可能仅使用一个SELECT 在数组或对象中获取包含所有答案的所有民意调查。在到目前为止的答案中,您使用了 $tmp 变量,该变量已取自先前的查询。那么有可能做到还是我没有得到答案?

【问题讨论】:

我无法正确制作表格,请有人告诉我如何编辑它们,让我看起来像真正的表格:)。 【参考方案1】:
SELECT pollQuestion, pollAnswerID, pollAnswerText
FROM   poll_answers pa, poll p
WHERE  p.pollID='$tmp'
       AND pa.pollId = p.pollID

或者,如果您更喜欢INNER JOIN 语法,

SELECT pollQuestion, pollAnswerID, pollAnswerText
FROM   poll p
INNER JOIN
       poll_answers pa
ON     pa.pollId = p.pollID
WHERE  p.pollID='$tmp'

要获取数组中的所有内容,请使用:

SELECT  -1, pollQuestion
FROM    poll p
WHERE   p.pollID = @pollID
UNION ALL
SELECT  pollAnswerID, pollAnswerText
FROM    poll_answers pa
WHERE   pa.pollID= @pollID

【讨论】:

看起来像火箭科学,但确实有效。我应该看看一些高级 Sql 教程。 ty @Quassnoi:您能否请我参考一个页面,其中更彻底地解释了这些操作(选择 -1 和 @ 符号的使用)。ty SELECT -1 只选择一个常量 -1 而不是一列。 @定义一个会话变量:dev.mysql.com/doc/refman/5.0/en/using-system-variables.html【参考方案2】:
SELECT polls.pollID, answers.pollAnswerID, answers.pollAnswerText 
FROM poll polls
LEFT JOIN poll_anwers answers ON polls.pollID = answers.pollID
WHERE polls.pollID = " . (int) $pollId . "

【讨论】:

【参考方案3】:

您想要所有民意调查的所有答案吗?只需删除 pollID 约束:

选择 p.pollID p.pollQuestion、pa.pollAnswerID、pa.pollAnswerText FROM 民意调查 p, poll_answers pa WHERE pa.pollID = p.pollID

【讨论】:

以上是关于如何对表示具有多个答案的民意调查的两个表使用一个查询?的主要内容,如果未能解决你的问题,请参考以下文章

防止发布没有选择的民意调查

有没有办法从 Instagram 故事中检索民意调查选民名单?

Primefaces 一项民意调查“暂停”另一项民意调查

民意调查与epoll洞察力[重复]

如何构造复杂的表格元素

vbscript 按下键的民意调查。您可以对指定的按键作出反应。