【问题标题】:How to compare two CodeIgniter query results如何比较两个 CodeIgniter 查询结果
【发布时间】:2018-09-11 11:29:14
【问题描述】:

我有一个名为 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。我做错了什么?

【问题讨论】:

  • 尝试将if ($currentbulanan &gt; $previousbulanan)改为if ($currentbulanan-&gt;bulanan &gt; $previousbulanan-&gt;bulanan)。
  • @ekad 谢谢.. 我通过添加 ->bulanan 进行了更改,但颜色仍然是 yellow 即使值大于第一个列..并且仍然对如何在 JS 中调试代码感到好奇.. 将 var_dump 放在模型中什么都没有显示..
  • 我建议使用log_messages 函数进行调试。有关示例,请参阅this question。您需要先设置log_path 和log_threshold。像这样使用它:log_message('debug', 'The value of $currentbulanan is: '. print_r($currentbulanan));,然后打开你的日志文件并检查结果。
  • @ekad 非常感谢您的所有回复,我将学习该方法并检查您建议的链接,但在这里我使用非 JS 得到 Var_dump 结果(将我的代码复制到 JS 之外),我现在可以看到 $currentbulanan 的值: object(stdClass)#21 (1) { ["bulanan"]=> string(1) "0" }
  • 好的,现在我们知道$currentbulanan 是一个具有bulanan 属性的对象。你可以试试var_dump($currentbulanan-&gt;bulanan)吗?如果它是一个字符串,那么您需要将其转换为浮点数并对$previousbulanan 变量执行相同的操作。之后,您可以使用&gt; 比较它们。

标签: php mysql codeigniter if-statement


【解决方案1】:

根据CodeIgniter Generating Query Results Documentation

行()

此方法返回单个结果行。如果您的查询不止一行,它只返回第一行。结果作为对象返回。

由于您使用-&gt;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变量的类型都是object,所以像这样比较

if ($currentbulanan > $previousbulanan)

与比较两个数字不同。您需要将$currentbulanan 和$previousbulanan 的bulanan 属性转换为浮动

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

然后像下面这样比较它们

if ($cbulanan > $pbulanan)

另一个问题是这个语法

if ($currentbulanan = $previousbulanan)

它将始终为真,因此$progres 将始终设置为yellow。根据PHP Comparison Operators Documentation,检查相等性的正确语法是==。

下面是修改后的完整代码

$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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-04
    • 1970-01-01
    • 1970-01-01
    • 2011-04-15
    • 1970-01-01
    • 2011-10-01
    • 1970-01-01
    相关资源
    最近更新 更多