查找上周评分最高的问题。 (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查询)的主要内容,如果未能解决你的问题,请参考以下文章