在上周找到最高投票的问题。 (sql查询)

时间:2009-07-20 16:39:24

标签: php sql mysql

我有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

4 个答案:

答案 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)的记录。

除非你绝对需要,我还建议不要使用*。我知道如果您想要表中的大多数列,这可能会很痛苦,但最好只选择您需要的列。