Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Player Undercover

[Resolvido] Banners

Recommended Posts

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;

- Publicidade tem período e tem impressões, verificando se está dentro do período e não passou o pageviews.

 

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??

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.