Как сравнить два результата запроса CodeIgniter - PullRequest
0 голосов
/ 11 сентября 2018

У меня есть таблица с именем 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.Что я делаю не так?

1 Ответ

0 голосов
/ 13 сентября 2018

Согласно Документация результатов генерации запроса CodeIgniter

row ()

Этот метод возвращает одну строку результата.Если ваш запрос содержит более одной строки, он возвращает только первую строку.Результат возвращается как объект .

Поскольку вы используете синтаксис ->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)

, не будет работать так же, как сравнение двух чисел.Вам необходимо преобразовать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...