вернуть 0, если значение равно нулю

0

У меня есть MySQL-запрос в моем php-скрипте, который сейчас работает нормально. Единственная проблема, с которой я сталкиваюсь, заключается в том, что некоторые столбцы возвращают нулевые значения.

Если для этих столбцов есть данные, они возвращают значение, но если нет данных или записей для даты, они возвращают значение null. Все, что я хочу сделать, это изменить этот запрос, чтобы, если что-то пустое, оно возвращает "0".

Я не уверен, следует ли использовать IFNULL или объединиться, но в любом случае я не знаком с лучшим способом применить его к этому запросу.

Буду признателен за любую оказанную помощь.

$stmt3 = mysqli_prepare($conn2,
     "UPDATE ambition.ambition_totals a
        INNER JOIN 
        (SELECT 
            c.user AS UserID,
            COUNT(*) AS dealers,
            ROUND((al.NumberOfDealers / al.NumberOfDealerContacts) * 100 ,2)  AS percent
        FROM jfi_dealers.contact_events c
        JOIN jackson_id.users u
        ON c.user = u.id
        JOIN jfi_dealers.dealers d
        ON c.dealer_num = d.dealer_num
        LEFT JOIN (
          SELECT user_id, COUNT(*) AS NumberOfDealerContacts,
          SUM(CASE WHEN ( d.next_call_date + INTERVAL 7 DAY) THEN 1 ELSE 0 END) AS NumberOfDealers
          FROM jackson_id.attr_list AS al
          JOIN jfi_dealers.dealers AS d ON d.csr = al.data
          WHERE al.attr_id = 14
          GROUP BY user_id) AS al
        ON al.user_id = c.user
        GROUP BY UserID) as cu
        on cu.UserID = a.ext_id 
        SET a.dealers_contacted = cu.dealers,
          a.percent_up_to_date = cu.percent;
                ") or die(mysqli_error($conn2));

ОБНОВИТЬ

Версия с надписью IFNULL:

UPDATE ambition.ambition_totals a
        INNER JOIN 
        (SELECT 
            c.user AS UserID,
            ifnull(count(*),0) AS dealers,
            ifnull(ROUND((al.NumberOfDealers / al.NumberOfDealerContacts) * 100 ,2),0)  AS percent
        FROM jfi_dealers.contact_events c
        JOIN jackson_id.users u
        ON c.user = u.id
        JOIN jfi_dealers.dealers d
        ON c.dealer_num = d.dealer_num
        LEFT JOIN (
          SELECT user_id, COUNT(*) AS NumberOfDealerContacts,
          SUM(CASE WHEN ( d.next_call_date + INTERVAL 7 DAY) THEN 1 ELSE 0 END) AS NumberOfDealers
          FROM jackson_id.attr_list AS al
          JOIN jfi_dealers.dealers AS d ON d.csr = al.data
          WHERE al.attr_id = 14
          GROUP BY user_id) AS al
        ON al.user_id = c.user
        WHERE c.created_at >= CURDATE()
        GROUP BY UserID) as cu
        on cu.UserID = a.ext_id 
        SET a.dealers_contacted = cu.dealers,
          a.percent_up_to_date = cu.percent;
  • 0
    Вы всегда можете изменить значение NULL в 0 в php после выполнения запроса. Можете ли вы предоставить оставшуюся часть кода php?
  • 1
    Функция IF в MySQL будет работать нормально ... IF([column] IS NULL, 0, [colomn])
Показать ещё 1 комментарий
Теги:

1 ответ

0

Да, для этого вы можете использовать IFNULL. Но будьте уверены, что вы действительно хотите этого поведения. PHP также знаком с значениями NULL и может обрабатывать их просто отлично. 0 имеет совсем другое значение. Но если вы действительно хотите этого поведения, просто оберните поле или оператор, который может возвращать значение null в IFNULL, например:

SELECT IFNULL(user_id, 0);

Но вы также можете сделать это в самом PHP, поэтому вам не нужно изменять запрос:

if (is_null($result['field'])) {
  echo 0;
}

Или, если вы используете PHP 7+, вы также можете использовать нулевой оператор коалесценции:

echo $result['field'] ?? 0;
  • 0
    Это, вероятно, глупый вопрос, но я бы использовал 'field' в коде php? Или название каждого отдельного поля (например, идентификатор пользователя, дилеры и т. Д.)
  • 0
    Используйте фактическое имя поля, например, userID, дилеров и т. Д. И вместо $result используйте фактическую переменную, в которой вы сохраняете результат вашего sql-запроса (поэтому в любой переменной вы сохраняете результат выполнения $stmt3 в).
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню