我有两个表民意调查和 poll_answers ,它们代表一个民意调查以及可供选择从民意调查中回答问题的选项。 EX:
我对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
变量,该变量已从先前的查询中获取。那么有可能做到这一点还是我没有得到答案?
答案 0 :(得分:5)
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
答案 1 :(得分:1)
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 . "
答案 2 :(得分:1)
您想要所有民意调查的所有答案吗?只需删除pollID约束:
SELECT p.pollID p.pollQuestion,pa.pollAnswerID,pa.pollAnswerText FROM poll p,poll_answers pa WHERE pa.pollID = p.pollID