查找上周评分最高的问题。 (sql查询)

Posted

技术标签:

【中文标题】查找上周评分最高的问题。 (sql查询)【英文标题】:Finding the higest voted Question in last week. (sql query) 【发布时间】:2009-07-20 16:39:24 【问题描述】:

我有 3 个 sql 表:

qotwQuestion1a(QuestionId [primarykey], Question, MemberId, PostDate);
qotwVote1a (QuestionId [primarykey], MemberId [primarykey], Vote1a);
qotwMember (MemberId [primarykey], Name, Password, emailId);

我想编写一个 sql 查询来查找上周投票最高的 Question 的 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 给出上周开始和结束的日期。

有人可以帮我解决这个问题吗?

最好的 泽山

【问题讨论】:

您在下面的评论中提到您希望所有问题获得最高投票。您应该在问题中提及这一点。 【参考方案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

【讨论】:

我使用了你的代码...仍然给我错误:“PHP 警告:mysql_fetch_array():提供的参数不是有效的 MySQL 结果资源” 尝试在MySQL Query Browser中运行它,将PHP问题与MySQL问题分开。【参考方案2】:

嗯,首先,使用MAX() 而不进行分组是.. 没用的,在这种情况下你不需要它。其次,如果您希望您的结果从最高票数到最低票数排序,为什么不按Vote1a 排序,并使用LIMIT 子句获取第一个结果。

【讨论】:

你没有得到我的问题,我只需要最高票的一个条目。或者如果有多个问题具有相同的最高票数......所有这些问题 嗯,我的建议仍然适用,但它变得更加复杂,因为要求获得最高投票的所有行。在这种情况下,您可以编写一个带有 WHERE close 的简单连接选择,它选择投票最高的行,您可以在子查询中获得这些行,例如 SELECT Vote1a AS highestVote, * FROM qotwMember, qotwQuestion1a , qotwVote1a <...> WHERE qotwVote1a.Vote1a = ( select max(Vote1a) from qotwVote1a group by Vote1a ) 由于长度限制,我省略了连接部分 - 这只是伪代码,我不确定它是否可以正常工作:)【参考方案3】:

希望你在某个地方处理关系;)

还有没有答案的问题。

除此之外...看起来您正在将成员与问题相匹配,如果您的表格按照它们看起来的方式设置,这可能没有意义。

【讨论】:

【参考方案4】:

试试这个:

选择投票 1a 作为最高投票,* FROM qotwMember, qotwQuestion1a , qotwVote1a WHERE qotwMember.MemberId=qotwQuestion1a.MemberId AND qotwQuestion1a.QuestionId=qotwVote1a.QuestionId AND qotwQuestion1a.MemberId=qotwVote1a.MemberId AND PostDate>='".$startofweek."' AND PostDate

不太清楚这个的语法,但基本想法是有一个可以获取所有记录的查询,然后在最后一分钟将其隔离到只有那些具有 MAX(Votela) 的记录。

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

【讨论】:

以上是关于查找上周评分最高的问题。 (sql查询)的主要内容,如果未能解决你的问题,请参考以下文章

如何使用“GROUP BY”在单个查询中查找 SQL 中最高和第二高的条目?

如何让 sql 排名查询工作以查找特定 id 的排名

SQL 查询优化(嵌套子查询)

sql查询员工的基本工资排名第3-6位的姓名和基本工资

SQL 查找 MAX 值的总和

SQL查询以在一组语句中查找最大值[重复]