Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 排名前五的问题_Php_Mysql_Codeigniter - Fatal编程技术网

Php 排名前五的问题

Php 排名前五的问题,php,mysql,codeigniter,Php,Mysql,Codeigniter,因此,我想知道这是否是管理此表数据的最佳方法,因为我的查询没有得到所需的正确结果 我希望它能从表中最后一个日期的条目中获得前5名的排名。一个问题是如果字符_id有一个0。当我用php检查是否没有值时,它应该回显TBD,但它仍然没有在数组中显示为0 表:top5 id ranking # character_id status_id date_created 1 1 1 1 2011-10-1

因此,我想知道这是否是管理此表数据的最佳方法,因为我的查询没有得到所需的正确结果

我希望它能从表中最后一个日期的条目中获得前5名的排名。一个问题是如果字符_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 ) )
编辑:还有人想试试吗


所以丢失了,无法获得所需的结果,仍然不确定它是什么db类,只是附加

AND date(date_created) = CURDATE();
查询

或将DESC追加到ORDER子句

大概是

$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();

您希望按top5.date_降序创建订单。如果你真的只想要最后一天,你还需要一个WHERE条件。

我猜你想要的是“排名前5名”的订单;我假设最后一天是24日?最后一天是指今天还是昨天?或者表中最后记录的日期?现在还包括时间,所以不能在同一天获取所有内容。您可能想执行和DATEdate\u created=curdate我已经用返回的数组更新了我的帖子,但返回的数组不是正确的信息。@BrianGlaz:啊,谢谢。我从来没有使用过日期栏,所以我不知道这是行不通的,因为这些是每个月的,所以从现在起3周后的同一时间应该有相同的结果。所以我需要添加注释行?不是从最后一天开始的,而是从最后一天开始的。有一点不同。@Magoo先生:我不明白你最后的评论是关于什么的。最后一天,最后一天,有什么区别吗?这是最后一天的条目。因此,从表中可以看到下面5个条目,因为它们的日期是最近的。我想我需要它来进行这个查询。这都是为CodeIgniter编写的。您的查询应该工作正常,并显示状态为1的最后5个条目。除非你的方法像极限法一样不能正常工作。
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();
}