2011-10-24 78 views
1

所以我想知道這是甚至是最好的方式來管理我的數據表,因爲我的查詢我沒有得到我想要的正確結果。前5名排名問題

我想要它從表中的最後日期條目中獲取top5排名。問題是如果character_id爲0。當我做我的PHP,看看是否有沒有價值,那麼它應該TBD呼應,但它仍然沒有顯示在陣列中它是0。

表:TOP5

id ranking # character_id status_id date_created 
1   1   1    1   2011-10-17 17:18:54 
2   2   2    1   2011-10-17 17:18:54  
3   3   3    1   2011-10-17 17:18:54 
4   4   4    1   2011-10-17 17:18:54 
5   5   5    1   2011-10-17 17:18:54 
6   1   6    1   2011-10-24 12:18:54 
7   2   7    1   2011-10-24 12:18:54 
8   3   8    1   2011-10-24 12:18:54 
9   4   9    1   2011-10-24 12:18:54 
10  5   0    1   2011-10-24 12:18:54 

function getTop5() 
{ 
    $this->db->select('characters.character_name, top5.character_id'); 
    $this->db->from('top5'); 
    $this->db->join('characters', 'characters.id = top5.character_id'); 
    $this->db->where('top5.status_id', '1'); 
    $this->db->order_by('top5.date_created','desc'); 
    $this->db->limit(5); 
    $query = $this->db->get(); 
    return $query->result_array(); 
} 

Array ([0] => 
     Array ([character_name] => \"Mr. Magnificent\" Matt Sharp 
       [character_id] => 9) 
     [1] => 
     Array ([character_name] => \"The Unforgettable\" Jimmy Watkins 
       [character_id] => 8) 
     [2] => 
     Array ([character_name] => Romie Rains 
       [character_id] => 7) 
     [3] => 
     Array ([character_name] => Monica Dawson 
       [character_id] => 6) 
     [4] => 
     Array ([character_name] => \"The Outlaw\" Mike Mayhem 
       [character_id] => 5)) 

編輯:任何人想要試一試?

等丟失,不能得到理想的結果仍然

+0

我想你想'order_by('top5.ranking'); ' –

+0

我假設最後一天是24日? – genesis

+0

「最後一天」是指當前日期還是昨天?或表中的最後錄製日期? –

回答

1

不知道什麼DB類,但只是追加

AND date(date_created) = CURDATE(); 

到查詢

或追加DESCORDER條款

所以像

$this->db->select('characters.character_name, top5.character_id'); 
$this->db->from('top5'); 
$this->db->join('characters', 'characters.id = top5.character_id'); 
$this->db->where('top5.status_id', '1'); 
// WHERE date(top5.date_created) = CURDATE() 
$this->db->order_by('top5.date_created'); 
$this->db->limit(5); 
$query = $this->db->get(); 
+0

'NOW()'也包含時間,所以它不會在同一天得到所有的東西。你想要做'和日期(date_created)= CURDATE()' –

+0

我已經更新了我的帖子,返回的數組看起來不是正確的信息。 –

+0

@BrianGlaz:啊,謝謝。我從來沒有使用日期欄,所以我沒有意識到這 – genesis

1

你想按top5.date_created降序排列。如果你真的只想要最後一天,那麼你還需要一個WHERE條件。

+0

是的,我需要最後一天。 –

1
function getTop5() 
{ 
    $this->db->select('characters.character_name, top5.character_id'); 
    $this->db->from('top5'); 
    $this->db->join('characters', 'characters.id = top5.character_id'); 
    $this->db->join('(SELECT DATE(MAX(date_created)) AS lastdate 
         FROM top5 
         WHERE status_id = 1 
        ) AS tm' 
        , 'top5.created_at >= tm.lastdate 
         AND top5.created_at < tm.lastdate + INTERVAL 1 DAY'); 
    $this->db->where('top5.status_id', '1'); 
    $this->db->order_by('top5.ranking','asc'); 
    $this->db->limit(5); 
    $query = $this->db->get(); 
    return $query->result_array(); 
} 
+0

它不是從上次日期輸入的最後一天開始。有一個區別。 –

+0

@ Mr.Magoo:我不明白你最近的評論是關於什麼的。最後一天,最後一天,有什麼不同? –

+0

它是最後的日期條目。所以從表中可以看出它是最低的5項,因爲它們的日期更近。 –