Ir para conteúdo

POWERED BY:

Arquivado

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

Hugo DJ

Múltiplos Inner Join

Recommended Posts

Caros,

 

Estou com o seguinte problema para fazer uma consulta ao MySQL:

 

Possuo 3 tabelas, Uma chamada cliente, outra chamada celula e outra chamada acct_v4.

A primeira armazena informações de clientes(inclusive o seu respectivo IP), a segunda informações das células de acesso ao sistema e a tarceira armazena informações sobre quanto o cliente já trafegou (download e upload).

 

Estou desenvolvendo um sistema onde o usuário precisa classificar os dados ora por nome, ora por download e ora por upload.

 

Estou utilizando a seguinte consulta:

 

SELECT nome_cliente,host_cliente,ip_cliente,celula.nome_celula,sum(acct_v4.bytes) AS down, sum(acct_v4.bytes) AS up \

FROM cliente \

INNER JOIN celula ON cliente.cod_celula = celula.cod_celula \

INNER JOIN acct_v4 ON cliente.ip_cliente = acct_v4.ip_dst \ ==> deve ser associado ao alias 'down'

INNER JOIN acct_v4 ON cliente.ip_cliente = acct_v4.ip_src \ ==> deve ser associado ao alias 'up'

GROUP BY nome_cliente \

ORDER BY down DESC;

 

Observe que seleciono o campo 'bytes' (ou melhor, a soma dos registros) da tabela acct_v4 duas vezes, uma chamando a soma de down' e a outra de 'up'. Preciso que a segunda e terceira INNER JOIN acima sejam associadas a cada um dos alias.

 

PS: Não necessariamente tenho que usar a consulta acima.

 

Se não entenderam, gentileza informar.

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Primeiramente, bem-vindo ao iMasters! :D

 

 

Não entendi direito.

A tabela acct_v4 não possui o ID do cliente? Seria mais fácil associar com o ID, pois nem sempre o mesmo cliente está com o mesmo IP.

 

Você está usando o campo bytes tanto para download quanto para upload. Está certo mesmo?

 

 

Poste as estruturas das tabelas, para entendermos melhor esse relacionamento de tabelas. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Beraldo,

 

obrigado.

 

A tabela acct_v4 não possui o campo 'cod_cliente'. Neste caso, os clientes têm IP Fixo e a única relação entre as tabelas são os IPs.

 

A estrutura da tabela 'acct_v4' é:

 

+----------------+---------------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+----------------+---------------------+------+-----+---------+-------+

| agent_id | int(2) unsigned | NO | PRI | | |

| mac_src | char(17) | NO | PRI | | |

| mac_dst | char(17) | NO | PRI | | |

| vlan | int(2) unsigned | NO | PRI | | |

| ip_src | char(15) | NO | PRI | | |

| ip_dst | char(15) | NO | PRI | | |

| src_port | int(2) unsigned | NO | PRI | | |

| dst_port | int(2) unsigned | NO | PRI | | |

| ip_proto | char(6) | NO | PRI | | |

| tos | int(4) unsigned | NO | PRI | | |

| packets | int(10) unsigned | NO | | | |

| bytes | bigint(20) unsigned | NO | | | |

| flows | int(10) unsigned | NO | | | |

| stamp_inserted | datetime | NO | PRI | | |

| stamp_updated | datetime | YES | | NULL | |

+----------------+---------------------+------+-----+---------+-------+

 

E da tabela 'cliente' é:

 

+-------------------+------------------+------+-----+---------------------+----------------+

| Field | Type | Null | Key | Default | Extra |

+-------------------+------------------+------+-----+---------------------+----------------+

| cod_cliente | int(10) unsigned | NO | PRI | NULL | auto_increment |

| cod_celula | int(10) unsigned | NO | MUL | 0 | |

| nome_cliente | varchar(60) | NO | | | |

| host_cliente | varchar(40) | NO | | | |

| resp_cliente | varchar(60) | NO | | | |

| email_cliente | varchar(50) | NO | | | |

| fone_cliente | varchar(20) | NO | | | |

| cod_speed_cir | int(10) unsigned | NO | | 0 | |

| cod_speed_mir | int(10) unsigned | NO | | 0 | |

| ip_cliente | varchar(15) | NO | | | |

| ip_radio_cliente | varchar(15) | NO | | | |

| mac_cliente | varchar(20) | NO | | | |

| mac_radio_cliente | varchar(20) | NO | | | |

| login_cliente | varchar(20) | NO | | | |

| senha_cliente | varchar(20) | NO | | | |

| obs_cliente | text | YES | | NULL | |

| data_cad_cliente | datetime | NO | | 0000-00-00 00:00:00 | |

| status_cliente | varchar(5) | NO | | | |

| cod_link | int(10) | NO | | 1 | |

+-------------------+------------------+------+-----+---------------------+----------------+

 

A tabela acct_v4 é preenchida da seguinte maneira:

 

A cada 1 minuto, o software que conta o tráfego dos clientes atualiza um registro. Além disso, a cada 15 minutos é gerado um novo registro. Desta forma o mesmo IP tem diversos registros. Assim, o total trafegado por um determinado IP é obtido fazendo-se um:

 

SELECT sum(bytes) FROM acct_v4 WHERE ip_dst='x.x.x.x'; => para Download

SELECT sum(bytes) FROM acct_v4 WHERE ip_src='x.x.x.x'; => para Upload

 

Claro que o SQL acima do adequado ao SQL que postei anteriormente. Novamente obrigado pela ajuda.

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.