Ir para conteúdo

POWERED BY:

Arquivado

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

hyperpixel

consulta cruazada com contagem por data

Recommended Posts

tenho q contar quantos cadastros um usuario faz por mes com a seguinte estrutura:

obs* na coluna oq da tabela (tab_acesso) o registro 1=(cliente),4=(representante) ou seja representante cadastra(clientes)

 

tab_acesso

id_cliente | data_cadastro | login | oq

000002 | 2007-11-30 15:20:00 | zé maria | 1

000003 | 2007-11-30 15:22:00 | hyperpixel | 4

000004 | 2007-11-30 15:25:00 | microsoft | 1

001019 | 2008-08-03 19:50:54 | nasa | 1

001020 | 2008-08-03 19:51:16 | robson | 4

001021 | 2008-08-03 20:00:53 | nestle | 1

001022 | 2008-08-03 20:07:43 | ferrari | 1

001023 | 2008-08-03 20:07:43 | ibm | 1

 

sistem_clientes

(pk)id_sistem_clientes | idCliente | qualRepresentante

001041 | 000004 | hyperpixel

001042 | 001019 | hyperpixel

001043 | 001020 | robson

001044 | 001021 | hyperpixel

001045 | 001022 | hyperpixel

001043 | 001023 | robson

 

com essa estrutura preciso saber quantos cadastros o usuario esta fazendo no mes atual no caso mes -08- como exemplo o hyperpixel fez 4 cadastros,mas apenas 3 no mes atual e o robson fez 2, entenderam a estrutura, o que liga as 2 tabelas é o campo [qualrepresentante] que a cada cadastro de empresa vai colocar o login de quem fez o cadastro, tentei usar as linhas abaixo mas nao deu certo acho que estou tendo problema na lógica da consulta, da erro!!

o problema esta no fato de contar em uma tabela e pegar a data em outra tabela n sei qual sintaxe uso group by, innerjoin, having etc nao estou vizualisando a solucao alguem tem alguma ideia?

SELECT

tab_acesso.id_cliente,

tab_acesso.login,

sistem_clientes.idCliente,

sistem_clientes.id_sistem_clientes,

sistem_clientes.qualRepresentante

count(qualRepresentante)

FROM tab_acesso

INNER JOIN sistem_clientes

ON tab_acesso.id_cliente=sistem_clientes.idCliente

WHERE

sistem_clientes.qualRepresentante='hyperpixel"

AND

MONTHNAME(NOW())=MONTHNAME(data_cadastro)

 

desde ja grato

Compartilhar este post


Link para o post
Compartilhar em outros sites

Explica direito ae que eu nao entendi nada!!!

resumindo contar ex: no caso os 4 cadastros do hyperpixel na tabela sistem_clientes e consultar na tabela tab_acesso a data que foi cadastrado no caso 4 cadastros mas no mes atual =8 foram só 3 isto que preciso quantos cadastros por mes

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ae Hyperpixel, ainda tá difícil de entender, mas vou tentar explicar o que entendi.

 

Eu entendi que o usuário cadastra o cliente na tabela SISTEM_CLIENTES. Se for isso, não tem como saber quantos cadastros foram realizados no mês, visto que não tem um campo na tabela sistem_clientes que consta a data em que o cliente foi cadastrado.

 

É isso mesmo ou não entendi o que você quer fazer?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu entendi que o usuário cadastra o cliente na tabela SISTEM_CLIENTES -ok

nao tem a data na tabela sistem_clientes, mas tenho qual representante fez o cadastro e tb o id desse cadastro entao pego esse id vou na tab_acesso e vejo a data entedeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

A normatização das suas tabelas é que está errada. Seria interessante ter uma chave estrangeira na tabela e não o login.

Vou tentar algo, ae você me diz se funciona.

 

 

SELECT

count(*)

FROM

tab_acesso a INNER JOIN sistem_clientes b ON a.login = b.qualRepresentante

WHERE

b.qualRepresentante = 'hyperpixel'

AND

data_cadastro BETWEEN '2008-08-01' AND '2008-08-31'

 

Se funcionar, posta ae.

Compartilhar este post


Link para o post
Compartilhar em outros sites

quase rsrs

olha só vi umas questoes que n entendi

1-você renomeou a coluna mas n uso a palavra AS?!!

2-outra coisa você colocou a data manualmente= BETWEEN '2008-08-01' AND '2008-08-31'

o certo nao seria usar funcoes de data ? tipo data_cadastro BETWEEN MONTH(data_cadastro) AND MONTH(now())

e nao BETWEEN (entre)mas sim exatamente no mes atual algo assim where MONTH(now())=MONTH(data_cadastro)

3- podemos usar o nome da coluna direto no count?ex: SELECT count(qualRepresentante)

depois de modificado ficou assim

 

$queryMes = "SELECT

count(qualRepresentante)

FROM

sistem_clientes

INNER JOIN

tab_acesso

ON tab_acesso.login = sistem_clientes.qualRepresentante

WHERE

sistem_clientes.qualRepresentante = 'hyperpixel'

AND

data_cadastro BETWEEN '2008-08-01' AND '2008-08-31'";// And MONTH(data_cadastro)=

 

$querymensal = mysql_query($queryMes,$conexao);

$querydomes = mysql_fetch_array($querymensal);

echo $totalpormes = $querydomes[0];

mysql_close($conexao);

 

Não deu erro de tempo de execução etc (warning)mas traz 0 o que nao é verdade onde esta o erro ?!!

valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

Respondendo os seus questionamentos:

 

1- O comando "AS" só precisa ser utilizado para criar alias dos campos. No caso de tabelas, basta colocar o alias ao lado. Com o "AS" tb funciona sem problema.

2- No lance da data você está certo. Era pra utilizar month(data_acesso) = month(now()). Eu é que viajei no meu raciocinio, mas que tb funciona, porém é manual e não funcional.

3- Pode-se utilizar o nome do campo na função COUNT, mas no nosso caso é indiferente. O resultado será o mesmo.

 

Estranho não funcionar. Eu testei aqui e funcionou.

 

Executa esse comando e me responde que resultado apareceu.

 

SELECT

*

FROM

tab_acesso a INNER JOIN sistem_clientes b ON a.login = b.qualRepresentante

WHERE

b.qualRepresentante = 'hyperpixel'

AND

month(a.data_cadastro) = month(now())

Compartilhar este post


Link para o post
Compartilhar em outros sites

com essas linhas de codigos n apareceu nada, apesar que ela nao retorna o resultado que queria pois esta sem a funcao count, ela traria apenas um registro

 

SELECT

*

FROM

tab_acesso a

INNER JOIN

sistem_clientes b

ON a.login = b.qualRepresentante

WHERE

b.qualRepresentante = 'hyperpixel'

AND

month(a.data_cadastro) = month(now())

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pô Hyperpixel,

 

Parece ser simples de resolver, mas eu precisaria ver o banco para saber exatamente o que fazer.

Esse comando que eu te passei deveria exibir todos os registros que obedecem a essa condição.

Põe a estrutura exata das duas tabelas juntamente com alguns registros.

De repente isso pode me clarear as idéias.

Compartilhar este post


Link para o post
Compartilhar em outros sites

preparei um modelo com alguns dados mas ja da p ter uma ideia

Servidor: localhost Banco de Dados: pentagraf Tabela: tab_acesso

 

-- phpMyAdmin SQL Dump

-- version 2.6.3-pl1

-- http://www.phpmyadmin.net

--

-- Servidor: localhost

-- Tempo de Geração: Ago 12, 2008 as 04:49 PM

-- Versão do Servidor: 3.23.47

-- Versão do PHP: 4.1.1

--

-- Banco de Dados: `teste`

--

 

-- --------------------------------------------------------

 

--

-- Estrutura da tabela `tab_acesso`

--

 

CREATE TABLE `tab_acesso` (

`id_cliente` int(6) unsigned zerofill NOT NULL default '000000',

`data_cadastro` datetime NOT NULL default '0000-00-00 00:00:00',

`login` varchar(120) NOT NULL default '',

`senha` varchar(12) NOT NULL default '',

`oq` int(1) NOT NULL default '0',

`ativo` int(1) NOT NULL default '0',

PRIMARY KEY (`id_cliente`)

) TYPE=MyISAM;

 

--

-- Extraindo dados da tabela `tab_acesso`

--

 

INSERT INTO `tab_acesso` VALUES (000002, '2007-11-30 15:20:00', 'rubstatus', '12345', 1, 1);

INSERT INTO `tab_acesso` VALUES (000003, '2007-11-30 15:22:00', 'peixeboi', '1111', 4, 1);

INSERT INTO `tab_acesso` VALUES (000004, '2007-11-30 15:25:00', 'maria jose', '241265', 4, 1);

INSERT INTO `tab_acesso` VALUES (000001, '2007-12-03 15:20:00', 'nessim', 'penta', 2, 1);

INSERT INTO `tab_acesso` VALUES (000017, '2008-01-04 11:30:00', 'hyperpixel', '1', 4, 1);

INSERT INTO `tab_acesso` VALUES (000048, '2008-01-04 11:30:00', 'liquipaper', '1', 1, 1);

INSERT INTO `tab_acesso` VALUES (000049, '2008-01-04 11:30:00', 'nasa', '1',1, 1);

INSERT INTO `tab_acesso` VALUES (000050, '2008-01-04 11:30:00', 'palmolive', '1', 1, 1);

INSERT INTO `tab_acesso` VALUES (000052, '2008-01-04 11:30:00', 'maria jose', '1', 1, 1);

 

 

-- phpMyAdmin SQL Dump

-- version 2.6.3-pl1

-- http://www.phpmyadmin.net

--

-- Servidor: localhost

-- Tempo de Geração: Ago 12, 2008 as 04:51 PM

-- Versão do Servidor: 3.23.47

-- Versão do PHP: 4.1.1

--

-- Banco de Dados: `teste`

--

 

-- --------------------------------------------------------

 

--

-- Estrutura da tabela `sistem_clientes`

--

 

CREATE TABLE `sistem_clientes` (

`id_sistem_clientes` int(6) unsigned zerofill NOT NULL default '000000',

`idCliente` int(6) unsigned zerofill NOT NULL default '000000',

`ramoAtividade` varchar(20) NOT NULL default '',

`nomeEmpresa` varchar(150) NOT NULL default '',

`nomeFantasia` varchar(150) NOT NULL default '',

`nome` varchar(150) NOT NULL default '',

`atendente` varchar(150) NOT NULL default '',

`cargo` varchar(150) NOT NULL default '',

`clientePentagraf` char(3) NOT NULL default '',

`cnpj` varchar(30) NOT NULL default '',

`inscricaoEstadual` varchar(30) NOT NULL default '',

`qualRepresentante` varchar(150) NOT NULL default '',

`emailAtivacao` datetime NOT NULL default '0000-00-00 00:00:00',

`origem` varchar(100) NOT NULL default '',

PRIMARY KEY (`id_sistem_clientes`)

) TYPE=MyISAM;

 

--

-- Extraindo dados da tabela `sistem_clientes`

--

 

INSERT INTO `sistem_clientes` VALUES (000001, 000048, '', 'Papelaria liquipaper', 'liquipaper', 'ERONI0', '', '', 'nao', '0000', '000', 'hyperpixel', '2008-05-27 10:30:08', '');

INSERT INTO `sistem_clientes` VALUES (000002, 000049, '', 'nasa motors', 'nasa ', 'Cleber', '', '', 'nao', '000000', '00003', 'hyperpixel', '0000-00-00 00:00:00', '');

INSERT INTO `sistem_clientes` VALUES (000003, 000050, 'Consumidor final', 'palmolive', 'Momentive', 'Fabiana ', '', '', 'N', '050007', '0000', 'hyperpixel', '2008-06-11 16:06:37', '');

INSERT INTO `sistem_clientes` VALUES (000004, 000051, 'Consumidor final', 'Uby soft', 'Ubuy', 'Vivian ', '', '', 'N', '0000', '000', 'zé maria', '0000-00-00 00:00:00', '');

INSERT INTO `sistem_clientes` VALUES (000005, 000052, 'Consumidor final', 'ibm', 'Easypaper', 'Rodrigo', '', '', 'N', '0000', '', 'maria jose', '2008-05-30 13:46:15', '');

INSERT INTO `sistem_clientes` VALUES (000006, 000053, 'microsoft', 'microsoft', 'Publicidade', 'Murilo ', '', '', 'nao', '', '', 'hyperpixel', '2008-05-27 09:27:04', '');

INSERT INTO `sistem_clientes` VALUES (000007, 000054, 'Grafica', 'MUNDIAL tennis', 'MUNDIAL', 'DR. FRANCISCO ', '', 'DIRETOR - PROPRIETÁRIO', 'Sim', '000000100', 'hyperpixel', 'robsoncrusoe', '2008-05-30 14:12:08', '');

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala Hyperpixel,

 

Com esses dados que você me passou, consegui obter o resultado com esse SELECT. Pq na tabela tab_acesso só tem uma data que corresponde ao mês 1 com o login hyperpixel.

 

SELECT

count(*)

FROM

tab_acesso a INNER JOIN sistem_clientes b ON a.login = b.qualRepresentante

WHERE

b.qualRepresentante = 'hyperpixel'

AND

month(a.data_cadastro) = 1

 

Deixa eu te perguntar uma coisa. Essa tabela TAB_ACESSO pode ter vários registros com o mesmo login? Por exemplo:

 

000002 | 2007-11-30 15:20:00 | zé maria | 1

000003 | 2007-11-30 15:12:45 | hyperpixel | 4

000005 | 2008-01-23 16:22:05 | hyperpixel | 4

000006 | 2008-05-12 17:32:02 | hyperpixel | 4

000007 | 2008-08-10 18:42:10 | hyperpixel | 4

000004 | 2007-11-30 15:25:00 | microsoft | 1

001019 | 2008-08-03 19:50:54 | nasa | 1

001020 | 2008-08-03 19:51:16 | robson | 4

001021 | 2008-08-03 20:00:53 | nestle | 1

001022 | 2008-08-03 20:07:43 | ferrari | 1

001023 | 2008-08-03 20:07:43 | ibm | 1

 

Se puder, então a query abaixo está certa para o que você quer.

 

SELECT

count(*)

FROM

tab_acesso a INNER JOIN sistem_clientes b ON a.login = b.qualRepresentante

WHERE

b.qualRepresentante = 'hyperpixel'

AND

month(a.data_cadastro) = month(now())

Compartilhar este post


Link para o post
Compartilhar em outros sites

resolvi com essas linhas

muito grato valeu

 

SELECT

count(qualRepresentante)

FROM sistem_clientes

INNER JOIN

tab_acesso

ON sistem_clientes.idCliente = tab_acesso.id_cliente

WHERE

qualRepresentante='hyperpixel'

AND

month(tab_acesso.data_cadastro) = month(now())

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.