У меня есть 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;
Да, для этого вы можете использовать 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;
$result
используйте фактическую переменную, в которой вы сохраняете результат вашего sql-запроса (поэтому в любой переменной вы сохраняете результат выполнения $stmt3
в).
IF([column] IS NULL, 0, [colomn])