2014-09-25 49 views
2

我有这样的代码及其计算所有列correct行和igonring代码LIMIT 5查询限制越来越忽略

行多数民众赞成越来越忽略


$last5rate = $db->prepare("select sum(correct) 
from exams where username = :username ORDER BY testID DESC LIMIT 5"); 

这里是整个代码


<?php 

require('includes/config.php'); 

//if not logged in redirect to login page 
if(!$user->is_logged_in()){ header('Location: login.php'); } 
$username = $_SESSION['username']; 
$last5rate = $db->prepare("select sum(correct) from exams where username = :username ORDER BY testID DESC LIMIT 5"); 
$last5rate->execute(array(':username' => $username)); 
for($i=0; $rows = $last5rate->fetch(); $i++){ 
    //Edit this row 
$last5 = $rows['sum(correct)']; 
$last5final = $last5/10; 
} 
echo $last5final; 

?> 

我曾尝试以下方法


select sum(correct) from exams where username 
= :username ORDER BY testID DESC LIMIT 0,5 

select sum(correct) from exams where username 
    = :username ORDER BY testID DESC LIMIT 5 

+1

我不认为LIMIT可以这样工作,你必须在连接中使用它,我相信它会在完成总和后应用限制 – andyroo 2014-09-25 13:39:13

回答

9

LIMIT限制结果的数量则返回

您的SUM总是返回1个结果,所以您的限制将不会执行任何操作。

如果需要,您可能需要像这样(未经测试,只是举例)

SELECT sum(correct) FROM(
    select correct from exams where username 
    = :username DESC LIMIT 5 
) 

我删除了顺序,摆弄它。

+0

最好的方法是什么? – thenashone 2014-09-25 13:42:01

+0

选择任何你想限制的子查询,然后从该子查询中求出'正确'。看例子。请注意,这是为了向您展示可能看起来像什么的要点,因为订单等原因。 – Nanne 2014-09-25 13:44:19