2009-07-20 90 views
0

我有一個3 SQL表:在上週找到最高投票的問題。 (SQL查詢)

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

我想寫一個sql查詢發現,在上週的最高票的問題的QuetionId和成員Id。我已經用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

您在下面的評論中提到,您希望獲得最高票數的所有問題。你應該在你的問題中提及。 – sangretu 2009-07-20 18:12:36

回答

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 
+0

我用你的代碼...仍然給我錯誤: 「PHP警告:mysql_fetch_array():提供的參數不是一個有效的MySQL結果資源」 – 2009-07-20 17:41:33

+0

嘗試在`MySQL Query Browser`中運行它,將`PHP`來自`MySQL`問題的問題。 – Quassnoi 2009-07-20 18:10:38

0

希望你在什麼地方處理的關係;)

和問題有沒有答案,對這一問題。

除此之外......它看起來像是將成員與問題進行匹配,如果您的表格按照它們的樣子設置,那麼這可能沒有意義。

1

那麼,首先,使用MAX()而不分組是無用的,在這種情況下你不需要它。其次,如果你希望你的結果從最高票數下降到最低票數,你爲什麼不以Vote1a訂購,並且只用LIMIT條款取得第一個結果。

0

試試這個:

SELECT Vote1a AS highestVote,* FROM qotwMember,qotwQuestion1a,qotwVote1a WHERE qotwMember.MemberId = qotwQuestion1a.MemberId AND qotwQuestion1a.QuestionId = qotwVote1a.QuestionId AND qotwQuestion1a.MemberId = qotwVote1a。成員Id AND踵> = ' 「$ startofweek」' AND踵< ='」。$ endofweek。 「」 GROUP BY Votela,* HAVING MAX(Votela) ORDER BY qotwQuestion1a.QuestionId DESC」);

對此語法的語法不太確定,但基本思想是有一個可以獲取所有記錄的查詢,然後在最後一分鐘將它隔離到只有具有MAX(Votela)的記錄。

我也建議不要使用*,除非你絕對需要它。我知道如果您想要使用表格中的大多數列,這可能會很痛苦,但最佳做法是隻選擇所需的列。