ruby на рельсы сгруппированы с проблемой нулевых значений - PullRequest
2 голосов
/ 01 марта 2011

У меня есть таблица часов, в которой я храню информацию о времени пользователя, таблица состоит из следующих ячеек

project_id
task_id (optional can be null)
worker_id
reported_date
working_hours

каждый работник вводит несколько записей в день, поэтому, как правило, таблица выглядит следующим образом

id project_id  worker_id task_id   reported_date  working hours;    
== =========== ========= ========= =============  ==============
1  1           1         1         10/10/2011      4                 
2  1           1         1         10/10/2011     14                 
3  1           1                   10/10/2011      4                 
4  1           1                   10/10/2011     14                 

task_id не является обязательным полем, поэтому могут быть случаи, когда пользователь не выбирает его и их ячейка task_id пуста
Теперь мне нужно отобразить данные с помощью группы по пункту
поэтому результат будет примерно таким:

project_id worker_id task_id   working hours
========== ========= ========= ==============
1          1         1         18                 
1          1                   18            

Я сделал следующую группу по условию:

@group_hours = Hour.group('project_id,worker_id,task_id)').
      select('project_id, task_id ,worker_id,sum(working_hours) as 
         working_hours_sum')

Мой взгляд выглядит так

<% @group_hours.each do |b| %>
     <tr>
       <td><%= b.project.name if b.project %></td>
        <td><%= b.worker.First_name if b.worker %></td>
        <td><%= b.task.name if b.task %></td>
        <td class="center"><%= b.working_hours_sum %></td>
       <td></td>
     </tr>
<% end %>

Это работает , но только если значение task_id не равно нулю , когда идентификатор задачи равен NULL, оно представляет все записи, не группируя их следующим образом

project_id  worker_id task_id   working hours
=========== ========= ========= ==============
1           1         1         18                 
1           1                    4            
1           1                   14    

Буду признателен за любое решение этой проблемы

1 Ответ

2 голосов
/ 01 марта 2011

Предполагая, что вы используете mysql, вы можете использовать функцию COALESCE для работы с нулями, изменив нулевое значение на что-то другое

например.

select COALESCE(colname,0) from table where COALESCE(colname,0) > 1;

IFNULL () - еще одна опция

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...