Hugo DJ 0 Denunciar post Postado Janeiro 25, 2008 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
Beraldo 864 Denunciar post Postado Janeiro 25, 2008 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
Hugo DJ 0 Denunciar post Postado Janeiro 25, 2008 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
Eclesiastes 2 Denunciar post Postado Janeiro 26, 2008 Bom, até onde sei, vocẽ deverá fazer isso com subquery mesmo, no SELECT. Compartilhar este post Link para o post Compartilhar em outros sites