我有3个sql表:
qotwQuestion1a(QuestionId [primarykey], Question, MemberId, PostDate);
qotwVote1a (QuestionId [primarykey], MemberId [primarykey], Vote1a);
qotwMember (MemberId [primarykey], Name, Password, emailId);
我想编写一个sql查询来查找上周投票率最高的问题的QuetionId和MemberId。我在php中编写了这个查询,但它给了我一个错误的结果:
$result6 = mysql_query("SELECT MAX(Vote1a) AS highestVote, * FROM qotwMember, qotwQuestion1a , qotwVote1a
WHERE qotwMember.MemberId=qotwQuestion1a.MemberId
AND qotwQuestion1a.QuestionId=qotwVote1a.QuestionId
AND qotwQuestion1a.MemberId=qotwVote1a.MemberId
AND PostDate>='".$startofweek."' AND PostDate<='".$endofweek."'
ORDER BY qotwQuestion1a.QuestionId DESC ");
while($row6 = mysql_fetch_array($result6))
{
echo "The highest voted question of the last week is: "; echo $row6['highestVote']; echo $row6['MemberId'] . " " . $row6['Name'] . " " . $row6['Password'] . " " . $row6['PostDate'] . " " . $row6['Question']." ".$row6['QuestionId']." ".$row6['Vote1a'];
echo "<br />";
}
$startofweek
和$endofweek
给出上周开始日期和上周结束日期。
请有人帮我解决这个问题。
最佳Zeeshan
答案 0 :(得分:1)
SELECT *
FROM (
SELECT q.QuestionId, q.MemberID
FROM qotwQuestion1a q
JOIN qotwVote1a v
ON v.QuestionID = q.QuestionID
WHERE PostDate BETWEEN $startdate AND $enddate
GROUP BY
q.questionID
ORDER BY
COUNT(*) DESC
LIMIT 1
) qo
JOIN qotwMember m
ON m.MemberID = q.MemberID
答案 1 :(得分:1)
嗯,首先,使用MAX()
而不使用灌浆是没用的,在这种情况下你不需要它。其次,如果您希望从最高投票到最低投票顺序排序的结果,为什么不按Vote1a
订购,只需使用LIMIT
条款获取第一个结果。
答案 2 :(得分:0)
希望你在某处处理关系;)
问题没有答案,就此而言。
除此之外......看起来你正在将这个成员与问题相匹配,如果你的表格按照它们的方式进行设置,这可能没有意义。
答案 3 :(得分:0)
试试这个:
SELECT Vote1a AS highestVote,* 来自qotwMember,qotwQuestion1a,qotwVote1a 在哪里qotwMember.MemberId = qotwQuestion1a.MemberId AND qotwQuestion1a.QuestionId = qotwVote1a.QuestionId AND qotwQuestion1a.MemberId = qotwVote1a.MemberId AND PostDate&gt; ='“。$ startofweek。”' AND PostDate&lt; ='“。$ endofweek。”' GROUP BY Votela,* 拥有MAX(Votela) ORDER BY qotwQuestion1a.QuestionId DESC“);
对这个语法的语法不太确定,但基本思路是有一个可以获取所有记录的查询,然后在最后一刻,将它隔离到那些具有MAX(Votela)的记录。
除非你绝对需要,我还建议不要使用*。我知道如果您想要表中的大多数列,这可能会很痛苦,但最好只选择您需要的列。