2013-07-25 70 views
0

我有以下MySQL的聲明,我不能獲得累積性總在我while循環「排名」如何獲取累積性總公式的MySql中陳述

SELECT *, 
    q1 + ((q1 + q2 + q3 + q4 + q5 + q6)/6) 
    AS ranking 
    /SUM(ranking) 
    FROM table 
    WHERE field = :field 
    GROUP by id 

我查詢的這部分工作完全:

q1 + ((q1 + q2 + q3 + q4 + q5 + q6)/6) 
    AS ranking 

我需要劃分「AS排名」在查詢輸出每個「排名」這一行的總和值和$ rankingPercentage變量在我while循環返回。

q1q2q3q4q5q6在一個表中的所有領域和0到100

之間包含我希望返回$ rankingPercentage那就是「排名」(我上面的公式的輸出數值(VARCHAR) 「AS排名」)除以SQL查詢中返回的所有'排名'行的總和。

我While循環如下:

while($row = $sqlprep->fetch(PDO::FETCH_OBJ)){ 

     $ranking = $row->ranking; 

     echo '<tr valign="bottom"><td>' . $row->id . '</td>'; 
     echo '<td>' . $row->uid . '</td>'; 
     echo '<td>' . $row->q1 . '</td>'; 
     echo '<td>' . $row->q2 . '</td>'; 
     echo '<td>' . $row->q3 . '</td>'; 
     echo '<td>' . $row->q4 . '</td>'; 
     echo '<td>' . $row->q5 . '</td>'; 
     echo '<td>' . $row->q6 . '</td>'; 
     echo '<td>' . $row->q9 . '</td>'; 
     echo '<td class="capitalise">' . $ranking. '</td>'; 
     echo '<td class="capitalise">' . $rankingPercentage . '</td>'; 
     echo '</tr>'; 
    } 
+0

正常化,也許? – Strawberry

+0

@Strawberry請你詳細說明一下嗎? – Grant

+0

不,我不能。但其他人可能會。 – Strawberry

回答

1

據我瞭解,你有一個公式來指定每行一個分數,然後你需要了解哪部分此行賺取的所有行的總比分。

子選擇將解決這個問題,儘管聯接可能會更有效。

SELECT 
    *, 
    <formula> AS ranking 
    <formula>/(
     SELECT SUM(<formula>) 
     FROM table 
     WHERE field = :field 
    ) AS rankingPercentage 
FROM table 
WHERE field = :field 
GROUP BY id 

這會告訴你整個的每一行擁有的一部分,它不會告訴你,一個給定行的前X%。

+0

看起來你已經解決了它!我添加了:按排名百分比DESC排序 – Grant