Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Pessoal, já procurei na net e até achei alguns scripts, mas nada que solucionasse meu problema.
Imaginem que tenho um gerenciamento de publicidades. As publicidades são vendidas por período, por exibições (impressões no site) ou ambos.
Tenho duas tabelas para isso. Uma para o cadastro e outra para as estatísticas.
--
-- Estrutura da tabela publicidades
--
CREATE TABLE IF NOT EXISTS `publicidades` (
`id` int(11) NOT NULL auto_increment,
`cliente` varchar(50) NOT NULL,
`campanha` varchar(60) NOT NULL,
`inicio` date NOT NULL,
`termino` date NOT NULL,
`impressoes` smallint(6) NOT NULL,
`formato` varchar(10) NOT NULL,
`peca` varchar(30) NOT NULL,
`html` text NOT NULL,
`url` text NOT NULL,
`target` varchar(10) NOT NULL,
`regiao` varchar(30) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `peca` (`peca`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=7;
--
-- Extraindo dados da tabela publicidades
--
INSERT INTO publicidades (id, cliente, campanha, inicio, termino, impressoes, formato, peca, html, url, target, regiao) VALUES
(1, 'Sabadão Top Fest', 'Divulgação', '2009-03-01', '2009-03-22', 0, '200x90', 'sabadao.swf', '', '', '', '6 '),
(2, 'Portal', 'Games', '2009-01-01', '2015-12-30', 0, '200x90', 'games.swf', '', '', '', '6 9 11 7 10 8 '),
(3, 'Portal', 'Aniversariantes', '2009-01-01', '2015-12-30', 0, '136x180', 'aniversariantes.swf', '', '', '', '6 9 11 7 10 8 '),
(4, 'Portal', 'Recados para Orkut', '2009-01-01', '2015-12-30', 0, '136x180', 'rorkut.swf', '', '', '', '6 9 11 7 10 8 '),
(5, 'Universidade', 'Divulgação', '0000-00-00', '0000-00-00', 3, '728x90', 'univer.swf', '', '', '', '6 9 11 7 10 8 '),
(6, 'Portal', 'Google Adsense', '2009-01-01', '2015-12-30', 0, '728x90', 'publicidade.html', 'html aqui', '', '', '6 9 11 7 10 8 ');
-- --------------------------------------------------------
--
-- Estrutura da tabela publicidades_stats
--
CREATE TABLE IF NOT EXISTS `publicidades_stats` (
`id` int(11) NOT NULL auto_increment,
`idpub` int(11) NOT NULL,
`ano` year(4) NOT NULL,
`mes` smallint(2) NOT NULL,
`pageviews` bigint(20) NOT NULL,
`clicks` bigint(20) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=8;
--
-- Extraindo dados da tabela publicidades_stats
--
INSERT INTO publicidades_stats (id, idpub, ano, mes, pageviews, clicks) VALUES
(1, 1, 2009, 3, 0, 0),
(2, 2, 2009, 3, 0, 0),
(3, 3, 2009, 3, 0, 0),
(4, 4, 2009, 3, 0, 0),
(5, 5, 2009, 3, 3, 0),
(6, 6, 2009, 3, 35, 0),
Se a publicidade for por impressões, os campos inicio e termino no banco receberão o valor '0000-00-00'.
Se a publicidade for por período, o campo impressoes receberá o valor 0;
A consulta que preciso tem que verificar se o banner está cadastrado para aquela região e para aquele formato e verificar as 3 situações abaixo e que seja aleatória:
- Se a publicidade está dentro do período e impressoes for igual a 0;
- Se a publicidade não tem período (0000-00-00), impressoes for diferente de 0 e for menor que a quantidade de vezes já exibida. (Quantidade de vezes já exibida é armazenada no campo 'pageviews' da tabela publicidades_stats) e;
O que consegui até agora foi isso, mas não está do jeito que realmente preciso:
mysql_query("SELECT * FROM publicidades INNER JOIN publicidades_stats ON publicidades.id = publicidades_stats.idpub AND publicidades_stats.ano = YEAR(NOW()) AND publicidades_stats.mes = MONTH(NOW()) AND publicidades.impressoes > publicidades_stats.pageviews WHERE regiao LIKE '%$RegiaoGLOBAL%' AND formato = '728x90' AND inicio <= CURDATE() AND termino >= CURDATE() ORDER BY RAND() LIMIT 1") or die (mysql_error());
Alguém consegue ver uma luz no fim do túnel??
Carregando comentários...