ФорумРазработкаБазы данных → разбиение данных по временным промежуткам

разбиение данных по временным промежуткам

  • Argnist

    Сообщения: 130 Репутация: N Группа: Кто попало

    Spritz 9 июля 2010 г. 14:25, спустя 6 минут 22 секунды

    Givi, как это сделать в PHP я не спрашивал, я спрашивал про MySql) согласись размер кода огромный

    artoodetoo, пасиб, уже что-то ближе, сейчас подумаю
  • Argnist

    Сообщения: 130 Репутация: N Группа: Кто попало

    Spritz 9 июля 2010 г. 14:34, спустя 9 минут 36 секунд


    вот чтобы небыло тыщ, делай group by. а чтобы мозг твой не расплавился что именно группировать - группируй по одному полю времени (+ опционально по полю id)
    схематично - я использую тип INT для времени - для простоты:
    
    $sql = "SELECT round(({$now}-v.visited)/{$interval}) AS ago, count(*) AS cnt
    FROM `visits` AS v
    GROUP BY ago";
    

    мне таки кажется, что цель посчитать количество заходов за интервал, а не количество заходов по пользователям, поэтому здесь группировка только по усеченному времени


    привязка к visited плохо( получается не все интервалы выводит, а надо бы чтоб ноль выводил
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 9 июля 2010 г. 14:37, спустя 2 минуты 29 секунд

    Да и вообще как-то ведь нужно от работы на пару минут отвлекаться.

    я вот отвлекусь сейчас = схожу куплю вентилятор на видяху на бук новый а то моему звезда пришла чото совсем)))))
    Сапожник без сапог
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 9 июля 2010 г. 14:52, спустя 15 минут 2 секунды

    Givi, +1 лишь бы не работать ;)

    нако ТС, погоняй:
    
    <?php
    /*—————————————-
    CREATE TABLE `visits` (
      `login` varchar(20) NOT NULL default '',
      `visited` int(11) NOT NULL default '0',
      `duration` int(11) default NULL,
      PRIMARY KEY  (`login`,`visited`)
    );
    
    
    INSERT INTO `visits` VALUES ('artoodetoo', 1278663805, 100);
    INSERT INTO `visits` VALUES ('guest', 1278667815, 102);
    INSERT INTO `visits` VALUES ('durov', 1278667831, 85);
    INSERT INTO `visits` VALUES ('artoodetoo', 1278667925, 52);
    —————————————–*/
    error_reporting(-1);
    
    define('TIMEFMT', 'd.m.Y H:i:s');
    date_default_timezone_set('Asia/Yekaterinburg');
    
    $db_host     = 'localhost';
    $db_name     = 'zhopa';
    $db_username = 'zhopa';
    $db_password = '123';
    
    
    $discrete = 1; // number of minutes in interval
    $interval = 60 * $discrete; 
    
    $link_id = mysql_connect($db_host, $db_username, $db_password);
    mysql_select_db($db_name, $link_id);
    
    if (isset($_GET['now']) && isset($_GET['from']) && isset($_GET['to'])) {
    
        $now  = intval($_GET['now']);
        $from = intval($_GET['from']) * $interval;
        $to   = intval($_GET['to'])   * $interval;
    
        $sql = "SELECT v.login, v.visited
        FROM visits AS v
        WHERE v.visited BETWEEN {$now} - {$to} AND {$now} - {$from}";
    
        $query_id = mysql_query($sql, $link_id);
    
        echo 'At: ' . date(TIMEFMT, $now) . ', interval ' . $_GET['from'] . ' - ' . $_GET['to'] . ' minutes ago' ."<br/>\n";
        echo "<hr/>\n";
        while ($arr = mysql_fetch_assoc($query_id)) {
          echo $arr['login'] . ' was ' . date(TIMEFMT, $arr['visited']) . "<br/>\n";
        }
        echo "<hr/>\n";
        $ref = $_SERVER['PHP_SELF'];
        echo '<a href="' . $ref . '">Return to list</a>' . "<br/>\n";
    
    } else {
    
        $now = time();
    
        $sql = "SELECT floor(({$now}-v.visited)/{$interval}) AS ago, count(*) AS cnt
        FROM visits AS v
        GROUP BY ago";
    
        $query_id = mysql_query($sql, $link_id);
    
        echo 'Now: ' . date(TIMEFMT, $now) . "<br/>\n";
        echo "<hr/>\n";
        while ($arr = mysql_fetch_assoc($query_id)) {
            $from =  $arr['ago']      * $discrete;
            $to   = ($arr['ago'] + 1) * $discrete;
    
            $ref = $_SERVER['PHP_SELF'] . '?now=' . $now . '&from=' .$from . '&to=' . $to;
            echo '<a href="' . $ref . '">' . $from . ' - ' . $to . ' minutes ago</a> was ' . $arr['cnt'] . ' visits ' . "<br/>\n";
        }
        echo "<hr/>\n";
    }
    
    Спустя 96 сек.
    я вот отвлекусь сейчас = схожу куплю вентилятор на видяху на бук новый а то моему звезда пришла чото совсем)))))

    конечно, виртуалки то они того, греют.
    ιιlllιlllι унц-унц
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 9 июля 2010 г. 14:51, спустя 23 часа 58 минут 51 секунду

    конечно, виртуалки то они того, греют.

    :D

    а ты тоже с Ебурга?


    Дуд, че за ноут?
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 9 июля 2010 г. 14:53, спустя 2 минуты 21 секунду

    с подъебуржья я
    Спустя 40 сек.
    на карте-сотке от ебурга вниз 2 см
    ιιlllιlllι унц-унц
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 9 июля 2010 г. 14:53, спустя 18 секунд

    Дуд, че за ноут?

    старье

    asus f3s + память апгрейд до 4гб. 3 года ему(клава сама 3 раза написала "ебу" .. не спроста …:D ) уже
    Сапожник без сапог
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 9 июля 2010 г. 14:57, спустя 4 минуты

    помоему ТС за такую работу просто обязан поцеловать меня в ж* заплюсовать
    Спустя 156 сек.
    ебаный парсер бибикода заменяет "&amp'" на "&"
    ιιlllιlllι унц-унц
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 9 июля 2010 г. 15:04, спустя 6 минут 31 секунду

    ну хоть какой-то профит сегодня

    алексувэ меня не догнать
    ιιlllιlllι унц-унц
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 9 июля 2010 г. 15:06, спустя 1 минуту 50 секунд

    artoodetoo, хахахахах КАРМАДРОЧЕР!!!!!!!!!

    давай те в шаблоне * 100 напишу?)))))))))))))
    Сапожник без сапог
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 9 июля 2010 г. 15:07, спустя 1 минуту 37 секунд

    ну это не фокус.
    ιιlllιlllι унц-унц
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 9 июля 2010 г. 15:11, спустя 3 минуты 24 секунды

    phpdude, песдуй в магазин уже!)
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 9 июля 2010 г. 17:05, спустя 1 час 54 минуты 14 секунд


    phpdude, песдуй в магазин уже!)
    в моей деревне не продают винтиляторы сука :(

    зато ахуенно прогулялся при солнышке, стопудово загорел)) встретил одноклассника, которого не видел года 3)
    Сапожник без сапог
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 10 июля 2010 г. 7:26, спустя 14 часов 20 минут 40 секунд

    хехе, заметил ошибку :)
    после первого if-a должно быть
    
        $now  = intval($_GET['now']);
        $from = intval($_GET['from']) * 60;
        $to   = intval($_GET['to'])   * 60;
    

    оно работало правильно только для $discrete=1, а с исправлением - для любой нарезки
    ιιlllιlllι унц-унц

Пожалуйста, авторизуйтесь, чтобы написать комментарий!