MySQL + CodeIgniter + Уникальное отслеживание кликов и общее количество кликов - PullRequest
1 голос
/ 27 марта 2012

Пытается отследить исходящие клики по рекламным объявлениям, но у меня возникают проблемы при составлении запроса для составления всей статистики, которую пользователь может просматривать и отслеживать.

У меня есть две таблицы, одна из которых содержит все рекламные объявления,другой для отслеживания кликов и основных сведений о пользователе.ip address, timestamp, user agent.

Мне нужно вытащить всю информацию map_advertisements вместе с уникальными кликами на основе IP-адреса и полными кликами на основе map_advertisements.id для отображения в таблице со строками.1 строка для каждого объявления и два его столбца будут totalClicks и totalUniqueClicks

Помимо выполнения трех отдельных запросов для каждого объявления, есть ли лучший способ сделать это?

Яиспользуя MySQL5 PHP 5.3 и CodeIgniter 2.1

#example of an advertisements id
$aid = 13;
SELECT
 *
 count(acl.aid)
 count(acl.DISTINCT(ip_address))
FROM
 map_advertisements a
 LEFT JOIN map_advertisements_click_log acl ON a.id = acl.aid
WHERE
 a.id = $aid;

map_advertisements

-- ----------------------------
--  Table structure for `map_advertisements`
-- ----------------------------

DROP TABLE IF EXISTS `map_advertisements`;
CREATE TABLE `map_advertisements` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `youtube_id` varchar(255) NOT NULL,
  `status` int(11) NOT NULL DEFAULT '1',
  `timestamp` int(11) NOT NULL,
  `type` enum('video','picture') NOT NULL DEFAULT 'video',
  `filename` varchar(255) NOT NULL,
  `url` varchar(255) NOT NULL,
  `description` varchar(64) NOT NULL,
  `title` varchar(64) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT;

map_advertisements_click_log

-- ----------------------------
--  Table structure for `map_advertisements_click_log`
-- ----------------------------
DROP TABLE IF EXISTS `map_advertisements_click_log`;
CREATE TABLE `map_advertisements_click_log` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `aid` int(11) NOT NULL,
  `ip_address` varchar(15) NOT NULL DEFAULT '',
  `browser` varchar(255) NOT NULL,
  `timestamp` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=26 DEFAULT CHARSET=latin1;

1 Ответ

4 голосов
/ 27 марта 2012

Проблема в том, что в вашем запросе нет столбца с именем totalClicks в вашей таблице, и ключевое слово также используется неправильно.Попробуйте это:

SELECT     *, count(acl.id) as totalClicks, count(DISTINCT acl.ip_address) as uniqueClicks
FROM       map_advertisements a
LEFT JOIN  map_advertisements_click_log acl ON a.id = acl.aid
WHERE      a.id = $aid;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...