2013-03-26 56 views
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 

不过,我不希望把它放在一个TABL即相反,我想根据查询条件了解一个人的等级。例如,给定名字马克,我应该直接得到他的行号(等级)为'2'。什么是我的MySQL查询使用codeigniter活动记录来实现这一点?

回答

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

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); 
+0

这不使用活动记录。 – 2013-03-26 02:38:33

+0

这是一件好事,主动记录查询是一种不好的做法。没有详细说明这一点......使用KISS编程原理,通过编写SQL形成一个SQL查询。 – 2013-03-26 02:56:35

+0

您可以使用两个变量 - ** $ sales_done **和** $ executive_name **(均通过post方法传递)进行查询,其中$ sales_done done对应于'sales'列,$ executive_name对应'name'数据库表“mytable”的列。 – 2013-03-26 06:04:11