Эхо/выход 0 (ноль) не работает

Я выполняю запрос, чтобы получить общую сумму нескольких часов из таблицы базы данных для отображения в файле PDF, но по какой-то странной причине он не будет отображать 0 (ноль).

 $query = mysql_query("SELECT id, SUM(hours_night), SUM(hours_days) FROM table WHERE invoiceID='".mysql_real_escape_string($invoiceID)."'") or die(mysql_error());
 $result = mysql_num_rows($query);

 $totalhours_night = 0;


     while ($fetch = mysql_fetch_assoc($query)) {

         $totalhours_night += $fetch['SUM(hours_night)'];
     }


$html_output = "Some html and tables markup... " . $totalhours_night . "";

Вывод html работает нормально, это не проблема ... но проблема в том, что по какой-то причине он не выводит 0 (ноль). Если часовой результат на самом деле что-то вроде 1 или 5 или что-то еще, он выводит общее количество часов в порядке, но мне нужно, чтобы он выводил 0, если часов нет.

Поскольку ничего не выводить, если нет часов, выглядит странно, мне нужно отобразить 0 нолей, так как это выглядит лучше.

Кстати, если я, например, поставлю number_format ($ totalhours_night, 2); он отображает 0,00, но мне нужно, чтобы это было просто 0.


person Adriaan    schedule 25.05.2012    source источник
comment
Что с number_format и вторым параметром 0   -  person rekire    schedule 25.05.2012
comment
Как вывести 0? С echo $totalhours_night;? Если это так, PHP действительно ничего не выведет в этом случае (что меня всегда очень раздражало). Просто сделайте echo $totalhours_night . ''; вместо этого.   -  person laurent    schedule 25.05.2012
comment
@Laurent Что? echo 0;0.   -  person deceze♦    schedule 25.05.2012
comment
@Adriaan Это довольно сложная логика. if ($fetch['SUM(hours_night)'] != 0) — это false, затем $fetch['SUM(hours_night)'] — это 0, и в этом случае $totalhours_night = $fetch['SUM(hours_night)']; вполне подойдет. Кроме того, нет необходимости в цикле while для получения результатов, поскольку у вас есть только один результат.   -  person deceze♦    schedule 25.05.2012
comment
Выполните некоторую отладку, var_dump() изменяя кучу переменных здесь и там, чтобы увидеть, каково их значение и какие if..else на самом деле выполняются.   -  person deceze♦    schedule 25.05.2012
comment
@Laurent Я действительно не использую эхо, мне нужно, чтобы оно отображало 0, если SUM(hours_night) равно 0. Я сохраняю содержимое в $html_output, а позже использую его для отображения в PDF.   -  person Adriaan    schedule 25.05.2012
comment
как вы выводите его при создании PDF?   -  person Andreas Wong    schedule 25.05.2012
comment
@NiftyDude, это не проблема, вывод в PDF работает нормально. Единственное, что не сработает, это вывести простой 0. Если, например, общее количество ночных часов равно 5, 5 отображается без проблем. Я также пытался сделать это $totalhours_night = '0'; но это тоже не сработает.   -  person Adriaan    schedule 25.05.2012
comment
@Adriaan Адриан, я спрашивал, потому что это может быть как-то связано с выводом в pdf, но если вы сделаете echo $totalhours_night, когда он равен «0», будет ли он нормально выводиться в вашем браузере?   -  person Andreas Wong    schedule 25.05.2012
comment
@NiftyDude, да, это просто эхо 0.   -  person Adriaan    schedule 25.05.2012
comment
хм, ладно... Тогда вероятно это как-то связано с библиотекой, которую вы используете для вывода pdf.. Удачи и ждите лучшего ответа :)   -  person Andreas Wong    schedule 25.05.2012
comment
@deceze, извините, это echo null; ничего не печатает.   -  person laurent    schedule 25.05.2012
comment
@NiftyDude, я в этом сомневаюсь. Если я использую, например, number_format(), он отображает 0,00, что также хорошо для решения, но мне не нравится видеть мои часы, такие как 0,00 и 5,00, мне просто нужно 0 или 5 или 5,25 и т. д.   -  person Adriaan    schedule 25.05.2012


Ответы (2)


Три вещи:

  1. Ваш SQL-запрос неверен, вы не можете отображать id и SUM(..), если не используете GROUP BY id (какой ребенок теряет идею, если id уникален)
  2. Если вы используете SUM(..), дайте ему псевдоним, например SUM(..) AS alias1, а позже в PHP обратитесь к alias1.
  3. Если причина не в этом, попробуйте var_dump($fetch['alias1']); и посмотрите, что вы действительно получите взамен. (И опубликуйте свои выводы здесь, чтобы мы могли оказать вам дополнительную помощь)
person Ramzi Khahil    schedule 25.05.2012
comment
1. Так что, если я потеряю идентификатор, запрос будет хорошим, так как я использую WHERE invoiceID='blabla'. Спасибо за понимание ;) - person Adriaan; 25.05.2012
comment
Между WHERE и GROUP BY есть принципиальная разница. WHERE — это фильтр, а несоответствующие строки не отображаются. А GROUP BY просто "сворачивает" их вместе. Попробуйте найти их, чтобы получить разницу. - person Ramzi Khahil; 25.05.2012

Рассматривайте целое число как строку, подобную этой:

echo (string)$totalhours_night;
person tim    schedule 25.05.2012
comment
вы удалили свой ответ, а затем сделали репост того же самого, чтобы избежать отрицательного голоса? - person Andreas Wong; 25.05.2012
comment
Какая? Ссылки на редактирование не было. Я на мобильном сафари. Что ты хочешь, чтобы я сделал? Вы имеете в виду, что он все еще там, даже если он удален? - person tim; 25.05.2012
comment
Это (не)полезно. ;) У вас достаточно репутации, чтобы удалять посты? В мобильном сафари действительно не было ссылки на редактирование. Ссылка на редактирование удаляется после минуса или что? - person tim; 25.05.2012
comment
Нет, он не должен исчезнуть просто так. В любом случае, я не думаю, что это не имеет никакого отношения к проблеме ОП (я также удалил свой ответ после того, как понял, что мой ответ на самом деле ему не помог) :), и, к вашему сведению, я не минусовал вас - person Andreas Wong; 25.05.2012