Php 排名前五的问题
因此,我想知道这是否是管理此表数据的最佳方法,因为我的查询没有得到所需的正确结果 我希望它能从表中最后一个日期的条目中获得前5名的排名。一个问题是如果字符_id有一个0。当我用php检查是否没有值时,它应该回显TBD,但它仍然没有在数组中显示为0 表:top5Php 排名前五的问题,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
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();
}