如何比较两个codeigniter查询结果

9nvpjoqh  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(290)

我有一个名为sla的表和一些名为harian(float)、bulanan(float)、progres(varchar)的列。我需要更新 progres 列到 green , yellow ,或 red 基于上个月的价值。
这是我试过的代码

$id = $this->input->post('txtId');
$idminus1 = floatval($id) - 1;

$currentbulanan = $this->db->query("SELECT bulanan 
                                    FROM sla 
                                    WHERE id='$id'")
                ->row();

$previousbulanan = $this->db->query("SELECT bulanan 
                                    FROM sla 
                                    WHERE id='$idminus1'")
                ->row();

if ($currentbulanan > $previousbulanan) { 
    $progres = "green"; 
}
if ($currentbulanan < $previousbulanan) { 
    $progres = "red"; 
} 
if ($currentbulanan = $previousbulanan) { 
    $progres = "yellow"; 
}

我想用 $progres 变量来更新 progres 列。我检查了第一个查询的结果是否大于第二个查询的结果,但是 $progres 总是 yellow . 我做错什么了?

nom7f22z

nom7f22z1#

根据codeigniter生成查询结果文档
行()
此方法返回单个结果行。如果查询有多行,则只返回第一行。结果作为对象返回。
既然你用的是 ->row() 要获取的语法 $currentbulanan 以及 $previousbulanan 变量如下

$currentbulanan = $this->db->query("SELECT bulanan 
                                    FROM sla 
                                    WHERE id='$id'")
                ->row();

$previousbulanan = $this->db->query("SELECT bulanan 
                                    FROM sla 
                                    WHERE id='$idminus1'")
                ->row();

那么两者的类型 $currentbulanan 以及 $previousbulanan 变量是对象,所以这样的比较

if ($currentbulanan > $previousbulanan)

和比较两个数字的效果不一样。你需要转换 bulanan 财产 $currentbulanan 以及 $previousbulanan 漂浮

$cbulanan = floatval($currentbulanan->bulanan);
$pbulanan = floatval($previousbulanan->bulanan);

然后像下面这样比较

if ($cbulanan > $pbulanan)

另一个问题是这个语法

if ($currentbulanan = $previousbulanan)

这永远是真的,所以 $progres 将始终设置为 yellow . 根据php比较运算符文档,检查相等性的正确语法是 == .
下面是完整的修改代码

$id = $this->input->post('txtId');
$idminus1 = floatval($id) - 1;

$currentbulanan = $this->db->query("SELECT bulanan 
                                    FROM sla 
                                    WHERE id='$id'")
                ->row();

$previousbulanan = $this->db->query("SELECT bulanan 
                                    FROM sla 
                                    WHERE id='$idminus1'")
                ->row();

// convert $currentbulanan->bulanan and $previousbulanan->bulanan to float
$cbulanan = floatval($currentbulanan->bulanan);
$pbulanan = floatval($previousbulanan->bulanan);

// compare the float values
if ($cbulanan > $pbulanan) { 
    $progres = "green"; 
}
if ($cbulanan < $pbulanan) { 
    $progres = "red"; 
} 
if ($cbulanan == $pbulanan) { // use the correct comparison operator
    $progres = "yellow"; 
}

// $progres will have the correct value here

相关问题