2011-10-24 43 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项,因为它们的日期更近。 –