0

我有一个 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 查询是什么?

4

2 回答 2

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 以识别行而不是字符串。

于 2013-03-26T07:09:35.310 回答
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);
于 2013-03-26T02:04:57.313 回答