Статистика перехода по коротким ссылкам

Битрикс считает только количество переходов по коротким ссылкам. Если необходима статистика перехода по дням, предлагается следующее решение с «минимумом» программирования.

Таблица b_short_uri

Так выглядит штатная таблица коротких ссылок Bitrix:

CREATE TABLE `b_short_uri` (
  `ID` int(18) NOT NULL AUTO_INCREMENT,
  `URI` varchar(250) NOT NULL,
  `URI_CRC` int(18) NOT NULL,
  `SHORT_URI` varbinary(250) NOT NULL,
  `SHORT_URI_CRC` int(18) NOT NULL,
  `STATUS` int(18) NOT NULL DEFAULT '301',
  `MODIFIED` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `LAST_USED` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `NUMBER_USED` int(18) NOT NULL DEFAULT '0',
  PRIMARY KEY (`ID`),
  KEY `ux_b_short_uri_1` (`SHORT_URI_CRC`),
  KEY `ux_b_short_uri_2` (`URI_CRC`)
) ENGINE=InnoDB DEFAULT CHARSET=cp1251;

Таблица short_uri_details

Создаем новую таблицу, в которую будет сохраняться статистика:

CREATE TABLE `short_uri_details` (
  `ID` int(18) NOT NULL,
  `DATE` DATE NOT NULL,
  `COUNT` INT(11) UNSIGNED NOT NULL DEFAULT '0',
  PRIMARY KEY (`ID`, `DATE`)
) ENGINE=InnoDB DEFAULT CHARSET=cp1251;

Триггеры

Создаем триггеры, которые будут учитывать статистику:

DROP TRIGGER IF EXISTS `short_uri_insert`;
DROP TRIGGER IF EXISTS `short_uri_update`;
 
 
DELIMITER $$
 
  CREATE TRIGGER `short_uri_insert` AFTER INSERT ON `b_short_uri`
    FOR EACH ROW BEGIN
      INSERT INTO `short_uri_details` (`ID`, `DATE`, `COUNT`) VALUES (NEW.ID, NOW(), 0);
    END;
  $$
 
  CREATE TRIGGER `short_uri_update` BEFORE UPDATE ON `b_short_uri`
    FOR EACH ROW BEGIN
      INSERT INTO `short_uri_details` (`ID`, `DATE`, `COUNT`) VALUES (NEW.ID, NOW(), 0) ON DUPLICATE KEY UPDATE COUNT = COUNT + 1;
    END;
  $$
 
DELIMITER ;

Статистика

Так выглядит статистика переходов по дням:

+----+------------+-------+
| ID | DATE       | COUNT |
+----+------------+-------+
|  1 | 2016-06-10 |     2 |
|  2 | 2016-06-10 |     1 |
+----+------------+-------+

Красивый вывод графика, группировка по месяцам и кварталам - на PHP.