2012-07-30 72 views
0

我正在製作一個瀏覽器黑幫遊戲,並編寫列出所有家庭/幫派的頁面。mysql php排序結果包括SUM

每個家庭都有一個分等級,由它的全體成員的現金,子彈,EXP合併款項等

這是我的代碼遍歷以顯示家庭列表:

SELECT 
(SELECT COUNT(*) FROM players WHERE status='alive' AND family=f.id) as member_count, 
(SELECT SUM(bullets) FROM players WHERE status='alive' AND family=f.id) as sum_bullets, 
(SELECT SUM(cash) FROM players WHERE status='alive' AND family=f.id) as sum_cash, 
(SELECT SUM(exp) FROM players WHERE status='alive' AND family=f.id) as sum_exp, 
(SELECT SUM(killscore) FROM players WHERE status='alive' AND family=f.id) as sum_ks, 
name, id FROM familys f 

然後用PHP的循環中我工作了總積分:

$points = $rs[sum_bullets]/500; 
$points = $points + $rs[sum_cash]/10000; 
$points = $points + $rs[sum_exp]/1000; 
$points = $points + $rs[sum_ks]; 

現在到這個問題。我想使用ORDER BY points DESC來訂購結果。我如何調整我的查詢來做到這一點?

回答

0

嘗試從應用轉向邏輯到MySQL使用單個查詢以使其更快:

SELECT 
    (SELECT COUNT(*) FROM players WHERE status='alive' AND family=f.id) as member_count, 
    (SELECT SUM(bullets) FROM players WHERE status='alive' AND family=f.id) as sum_bullets, 
    (SELECT SUM(cash) FROM players WHERE status='alive' AND family=f.id) as sum_cash, 
    (SELECT SUM(exp) FROM players WHERE status='alive' AND family=f.id) as sum_exp, 
    (SELECT SUM(killscore) FROM players WHERE status='alive' AND family=f.id) as sum_ks, 
    name, id 
FROM familys f 
ORDER BY (sum_bullets/500 + sum_cash/10000 + sum_exp/1000 + sum_ks); 

編輯:爲total_points

SELECT a.*, (sum_bullets/500 + sum_cash/10000 + sum_exp/1000 + sum_ks) AS total_points 
FROM 
    (
    SELECT 
     (SELECT COUNT(*) FROM players WHERE status='alive' AND family=f.id) as member_count, 
     (SELECT SUM(bullets) FROM players WHERE status='alive' AND family=f.id) as sum_bullets, 
     (SELECT SUM(cash) FROM players WHERE status='alive' AND family=f.id) as sum_cash, 
     (SELECT SUM(exp) FROM players WHERE status='alive' AND family=f.id) as sum_exp, 
     (SELECT SUM(killscore) FROM players WHERE status='alive' AND family=f.id) as sum_ks, 
     name, id 
    FROM familys f 
    ) a 
ORDER BY (sum_bullets/500 + sum_cash/10000 + sum_exp/1000 + sum_ks) ASC; 
+0

感謝的輸出,我還需要從我編輯了我的職位給你,試試總積分 – user1022585 2012-07-30 11:10:05

+0

的查詢的輸出。 – Omesh 2012-07-31 04:01:50