我有一个mysql表 - mytable,像这样:
name | sales
Mark | 4
Steve | 2
Rick | 5
David | 1
根据完成的销售数量获取结果时:
$this->db->select('name,sales');
$this->db->where('sales >=', '2');
$this->db->order_by("sales", "desc");
$query = $this->db->get('mytable');
并放入一个排名表,它看起来像:
Rank | Name | Sales
1 | Rick | 5
2 | Mark | 4
3 | Steve | 2
但是,我不想把它放在桌子上。相反,我想知道基于查询条件的人的等级。例如,给定名称Mark,我应该直接将他的行号(等级)设为“2”。使用codeigniter活动记录实现此目的的mysql查询是什么?
答案 0 :(得分:2)
你想要实现的目标是不可解决的。这意味着MySQL在有任何工作之前知道您认为排名/位置的内容。
唯一可管理的方法是迭代你的结果,只打印你不想要的东西。
$name = "Mark";
$rank = 0;
$this->db->select('name,sales');
$this->db->where('sales >=', '2');
$this->db->order_by("sales", "desc");
$query = $this->db->get('mytable');
foreach($query->result() as $row)
{
$rank++;
if( $row->name == $name )
{
echo $row->name . ' has rank ' . $rank;
break; // No more iterating
}
}
您应该考虑进行一些表更改 - 例如向表中添加自动递增的ID以标识行而不是字符串。
答案 1 :(得分:0)
$query='SELECT name,sales
FROM mytable
WHERE sales>=?
ORDER BY sales desc';
$params=array();
$params[]=2;
$result=$this->db->query($query,$params);
$result=$result->result_array();
print_r($result[2]);
虽然你应该只使用限制来获得你想要的结果:
$query='SELECT name,sales
FROM mytable
WHERE sales>=?
ORDER BY sales desc
LIMIT 1,1'; //offset 1, show 1 result
$params=array();
$params[]=2;
$result=$this->db->query($query,$params);
$result=$result->row_array();
print_r($result);