Php codeigniter中按desc限制的Mysql查询顺序

Php codeigniter中按desc限制的Mysql查询顺序,php,mysql,codeigniter,Php,Mysql,Codeigniter,我有一个表目标如下 id | subject | achievement | staff_id 1 Target January 1150000 1 2 Target January 1350000 2 3 Target February 2000

我有一个表目标如下

id |    subject        |      achievement                |     staff_id
1     Target January          1150000                            1
2     Target January          1350000                            2
3     Target February         20000000                           1
4     Target February         23500000                           2
5     Target January          1500000                            3
我想展示的是在codeigniter中使用sql查询

SELECT * FROM `target` WHERE `staff_id`='$id' ORDER BY 'id' DESC LIMIT 3,1
我曾尝试在codeigniter中使用get where、order by和limit query,但屏幕变为空白

这是模型代码

    $id=get_staff_user_id();
    $this->db->get_where('target', array('staff_id'=>$id,));
    $this->db->order_by('id','desc');
    $this->db->limit(3, 1);  
    $query=$this->db->get();
    return $query;
这是控制器代码

 $data['target'] = $this->target_model->getAllTarget()->result();
这是查看代码

 <?php foreach($targets as $target){ 
  if($total >= floatval($target->achievement)) {
                $percent = 100;
            } else {
                if ($total !== 0) {
                    $percent = number_format(($total * 100) / $target->achievement, 2);
                }
            }
  echo $percent;
 ?>

我的代码中的错误在哪里

谢谢您

型号:

删除多余的逗号

在控制器中:

将目标更改为它从相同数组名获得的foreach中的目标

在模型中:

删除多余的逗号

在控制器中:

将目标更改为它从相同数组名获得的foreach中的目标


问题是-
get_where()
已经返回了一个DB结果实例-为了解决您的问题,您必须执行以下操作

return $this->db
    ->select('*')
    ->from('target')
    ->where('staff_id', get_staff_user_id())
    ->order_by('id', 'desc')
    ->limit(3,1)
    ->get();

问题是-
get_where()
已经返回了一个DB结果实例-为了解决您的问题,您必须执行以下操作

return $this->db
    ->select('*')
    ->from('target')
    ->where('staff_id', get_staff_user_id())
    ->order_by('id', 'desc')
    ->limit(3,1)
    ->get();

删除额外的逗号
$this->db->get_where('target',array('staff_id'=>$id))在$id之后,并启用错误报告以了解错误。“但是屏幕变为空白”您是指PHP的白色死亡屏幕检查错误日志。“删除额外的逗号$this->db->get_where('target',array('staff_id'=>$id));在$id之后”将无助于@devsiodera,因为像topicstarter那样使用逗号实际上是代码,不会给出解析错误。这只是建议,要知道确切的错误,请启用错误报告。
foreach($target as$target
将目标替换为目标,因为您将目标从控制器传递到视图。删除额外的逗号
$this->db->get_where('target',array('staff_id'=>$id));
在$id之后并启用错误报告以了解错误。“但是屏幕变为空白”您是指PHP的白色死亡屏幕检查错误日志。删除额外的逗号$this->db->get_where('target',array('staff_id'=>$id));在$id之后”对@DevsiOdedra没有帮助,因为像topicstarter那样使用逗号实际上是代码,不会给出解析错误。这只是建议,要知道确切的错误,请启用错误报告。
foreach($target as$target
替换目标到目标,因为您将目标从控制器传递到视图。
array('staff_id'=>$id,)
是PHP代码,不会给出解析器错误。.是的,它是有效的,但对于我刚才提到的安全方面,但是
控制器上的主要问题是
视图上的名称不同。
使用
数组('staff_id'=>$id,)
是安全的,因为它会生成“ghost”元素,当您阅读代码
array('staff\u id'=>$id,)
时,您可能会在这里看到它。但是我同意使用
array('staff\u id'=>$id,)
看起来有点奇怪。。是的@RaymondNijland它看起来很奇怪,谢谢分享:)没关系,如果代码只有一行,比如return$this->db->get\u where('target',array)('staff_id'=>$id));它工作正常
array('staff_id'=>$id,)
是PHP代码,不会给出解析器错误。是的,它是有效的,但对于我刚才提到的安全方面,但是
控制器方面的主要问题是
视图上的名称不同
使用
array时“是的,它是有效的,但对于安全方面”('staff\u id'=>$id,)
可以安全使用,因为它将生成一个“ghost”元素,当您阅读代码
数组时,您可能会在这里看到它('staff\u id'=>$id,)
。但是我同意使用
数组('staff\u id'=>$id,)
看起来有点古怪。@RaymondNijland它看起来很古怪,谢谢分享:)没关系,让我觉得奇怪的是,如果代码只有一行,比如return$this->db->get_where('target',array('staff_id'=>$id)),它就正常工作了fine@Vickel-ofc问题在于
get\u where()
的行为类似于
get()
所以在他的例子中,他基本上执行了两个查询——一个是以员工id为条件的查询——第二个是以order by和limit为条件的查询,但结果是一个错误——因为没有from表(如果选项
db_debug
false
——站点显示为空)oops,我没有看到第二个get(),对不起!@Vickel-ofc这是一个问题,
get_where()
的行为类似于
get()
,所以在他的例子中,他基本上执行了两个查询,一个是以员工id为条件的查询,另一个是以order by和limit为条件的查询,但会导致一个错误,因为没有from表(如果选项
db_debug
false
-站点显示为空白)oops,我没有看到第二个get(),抱歉!
return $this->db
    ->select('*')
    ->from('target')
    ->where('staff_id', get_staff_user_id())
    ->order_by('id', 'desc')
    ->limit(3,1)
    ->get();