}
    if ($filter['operator'] != 'like') {
        $filter['operator'] = 'like';
    }
    if (strlen($filter['value']) > 0) {
        $filterStr = 'WHERE al.' . $filter['property'] . '::text ' . $filter['operator'] . ' \'%' . $filter['value'] . '%\'';
    }
}
//Запрос для подсчета общего кол-ва записей для пейджинга
$sqltext = 'SELECT count(*) FROM (
              SELECT DISTINCT al.ip, ci.client, ci.os
              FROM access_log al
              LEFT JOIN client_info ci ON ci.ip = al.ip
              ' . $filterStr . '
            ) m';
$a = $dataAccess->execQuery($sqltext, array());
$sqltext = 'SELECT DISTINCT
                al.ip,
                ci.client,
                ci.os,
                (SELECT al1.url_from FROM access_log al1 WHERE al1.ip = al.ip ORDER BY al1.access_date ASC LIMIT 1)  AS url_from,
                (SELECT al2.url_to   FROM access_log al2 WHERE al2.ip = al.ip ORDER BY al2.access_date DESC LIMIT 1) AS url_to,
                count (DISTINCT al.url_to) AS url_count
            FROM access_log al
            LEFT JOIN client_info ci ON ci.ip = al.ip -- выбираем записи независимо есть ли для них браузер
            ' . $filterStr . '
            GROUP BY al.ip, ci.client, ci.os
            ORDER BY ' . $sortStr . '
            LIMIT $1 OFFSET $2';
$records = $dataAccess->execQuery($sqltext, array($limit, $start));
echo json_encode(array('records' => $records, 'totalCount' => $a[0]['count']));