2015-11-20 37 views
1

我的目標是顯示過去一個月中擁有最高記錄數的前五名球員。尋找最活躍的球員(表中符合條件的最高記錄數)

有沒有一種方法只使用單個查詢,還是我需要使用PHP來完成我的目標?下面是我如何已經完成了這個簡化版本(我想這是更多的性能問題,也請忽略笨,它是多餘的。):

$res = []; 

$q = $this->db1->query('SELECT authid, name FROM table WHERE date BETWEEN NOW() - INTERVAL 30 DAY AND NOW() ORDER BY date DESC'); 

foreach ($q->result_array() as $row) { 
    if (isset($res[$row['authid']])) { 
     $res[$row['authid']]['records'] += 1; 
    } else { 
     $res[$row['authid']] = [ 
      'records' => 1, 
      'name'  => $row['name'] 
     ]; 
    } 
} 

arsort($res); 

return array_slice($res, 0, 5); 
+0

GROUP BY授權,計數和顯示順序如何? –

回答

4

你想group byorder bylimit

SELECT authid, COUNT(*) as cnt 
FROM table 
WHERE date BETWEEN NOW() - INTERVAL 30 DAY AND NOW() 
GROUP BY authid 
ORDER BY cnt DESC 
LIMIT 5;