Jako rezultat ma wyjść tabelka - kolumny loginy, wiersze daty a w środku liczba wystąpień w tabeli dla danej daty i danego loginu:
data | login1 | login2 | suma
2011-06-18 6 7 13
2011-06-19 2 1 3
Razem: 8 8 16
Na tą chwilę zrobiłem to w sposób taki, że pobieram jednym selectem distinct daty, drugim selectem loginy.
Następnie lecę podwójnym foreach i dla każdej daty, wykonuję select count(*) dla każdego loginu.
Takie rozwiązanie jest jednak mało wydajne (przy 12 datach i 9 loginach łączny czas zapytania zajmuje 2 sekundy

Może ma ktoś wydajniejszy sposób do przetestowania?
Poniżej kod jakby kogoś interesował:
{ { return NULL; } { $start = 0; } { $end = 9999999999; } // Get dates first where cases were generated ->distinct('create_date') ->from(table') ->where('create_date', 'BETWEEN', array($start, $end + Date::DAY)) ->order_by('create_date') ->execute()->as_array('create_date'); // Count users for calculated dates $result = array(); foreach ($dates as $date => $value) { $result[$date] = array(); foreach ($users as $user) { ->from('table') ->where(array('FROM_UNIXTIME("create_date", \'%Y-%m-%d\')', NULL), 'LIKE', $date . '%') ->and_where('username', '=', $user) ->execute()->as_array(); $count = Arr::flatten($count); $result[$date][$user] = $count['total']; } } return $result; }