Dados duplicados consulta mysql php

23/03/2016

2

Boa tarde.sou novo nesse excelente fórum. Pois bem
Estou iniciando em php, e assim, usava antigamente o ASP clássicos, porém sempre desenvolvi pequenas aplicações, e agora com o php, estou na mesma dúvida, sobre dados duplicados de duas ou mais tabelas, numa consulta. O meu erro é o seguinte

Tenho uma consulta em uma tabela telefones, uma consulta em uma tabela setores, e mais uma em tipos_telefones

que me montam uma tabela puxando esses dados.Como sou chucro em modelagem sql, o meu código esta duplicando, trago os dois únicos registros porém a consulta trás vários, com os mesmos dois registros , porém a cada um dos dois mostra todos os setores, todos os tipos.Então , a consulta me mostra uns 50 resultados. Meu código.

<?php
$consulta = "SELECT telefones.telefone_id, telefones.telefone_numero,setores.setor_nome, tipos_telefones.tipo_descricao FROM telefones, setores,tipos_telefones";
$query = mysql_query($consulta) or die (mysql_error());
//$resultado = mysql_fetch_assoc($query);
$linha = mysql_num_rows($query);
if($linha>0){
?>
Responder

Posts

Suas tabelas possuem relacionamento? Chave Primaria e estrangeira?
Caso negativo, seria ideal começar a pensar nesse caso.
Por favor, poste a estrutura de suas tabelas para que possamos ajudar.
Responder

23/03/2016

Marcos P

Quando você faz...

... FROM telefones, setores,tipos_telefones


Sem especificar as chaves de ligação entre as tabelas na clausula WHERE do SELECT, conforme solicitado pelo FabiianooC, todos os registros serão combinados nas três tabelas, gerando as duplicações.

Isso só vai funcionar se houver colunas de ligação entre as tabelas !
Responder
Está aqui o meu banco com as tabelas
CREATE TABLE `telefones` (
`telefone_id` int(11) NOT NULL AUTO_INCREMENT,
`tipo_id` int(11) NOT NULL,
`setor_id` int(11) NOT NULL,
`telefone_numero` varchar(15) NOT NULL,
`telefone_mostrar` tinyint(1) NOT NULL,
PRIMARY KEY (`telefone_id`),
KEY `fk_telefones_tipos_telefones` (`tipo_id`),
KEY `fk_telefones_setores1` (`setor_id`),
CONSTRAINT `fk_telefones_setores1` FOREIGN KEY (`setor_id`) REFERENCES `setores` (`setor_id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
CONSTRAINT `fk_telefones_tipos_telefones` FOREIGN KEY (`tipo_id`) REFERENCES `tipos_telefones` (`tipo_id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
Responder
Por exemplo. A minha pagina de exibição.php trás assim

1 36255101 APDO Ramal
2 36255101 APDO Ramal
1 36255101 Contabilidade Ramal
2 36255101 Contabilidade Ramal
1 36255101 Area de Recursos humanos Ramal
2 36255101 Area de Recursos humanos Ramal
1 36255101 Pronto Socorro Ramal
2 36255101 Pronto Socorro Ramal
1 36255101 Pronto Socorro 2 Ramal
2 36255101 Pronto Socorro 2 Ramal
1 36255101 ATI Ramal
2 36255101 ATI Ramal
1 36255101 APDOI Ramal
2 36255101 APDOI Ramal
1 36255101 APDO Direto
2 36255101 APDO Direto
1 36255101 Contabilidade Direto
2 36255101 Contabilidade Direto
1 36255101 Area de Recursos humanos Direto
2 36255101 Area de Recursos humanos Direto
1 36255101 Pronto Socorro Direto
2 36255101 Pronto Socorro Direto
1 36255101 Pronto Socorro 2 Direto
2 36255101 Pronto Socorro 2 Direto
1 36255101 ATI Direto
2 36255101 ATI Direto
1 36255101 APDOI Direto
2 36255101 APDOI Direto
1 36255101 APDO Celular
2 36255101 APDO Celular
1 36255101 Contabilidade Celular
2 36255101 Contabilidade Celular
1 36255101 Area de Recursos humanos Celular
2 36255101 Area de Recursos humanos Celular
1 36255101 Pronto Socorro Celular
2 36255101 Pronto Socorro Celular
1 36255101 Pronto Socorro 2 Celular
2 36255101 Pronto Socorro 2 Celular
1 36255101 ATI Celular
2 36255101 ATI Celular
1 36255101 APDOI Celular
2 36255101 APDOI Celular
1 36255101 APDO Interurbano
2 36255101 APDO Interurbano
1 36255101 Contabilidade Inter

onde existe o id_telefone - telefone_numero - setor_descricao e tipo_telefone
Responder
Veja se é isso.

select * 
from telefones 
inner join setores
on telefones.setor_id = setores.setor_id
inner join tipos_telefones
on telefones.tipo_id = tipos_telefones.tipo_id
Responder
Valeu meu irmão....resolvido!!
O que vc me indica para entender melhor, pra fazer as minhas query....aqui
Obrigado
Responder