Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Fala galera!
Já estou com dor de cabeça num sisteminha que estou montando aqui para minha assistência técnica.
Resumindo:
Controlo meus clientes hoje em excel e começou a aumentar o volume, então, estou passando tudo para MYSQL AND PHP.
Sou iniciante em programação WEB.
Onde estou:
Montei a página inicial que carrega todos os clientes cadastrados e outras informações básicas, até aí Ok.
Ao clicar em qualquer um destes clientes, passo as informações via URL/GET para uma outra página que possui os detalhes do cliente.
Cada cliente pode ter mais de um computador, mais de um contato, mais de um periferico, mais de um atendimento e esta página "detalhes" precisa repetir todas os itens quando > 1.
Todos estes outros campos que podem possuir mais de um estão em tabelas. Ou seja, tenho além da tabela principal (clientes) + 5 outras tabelas.
O que está acontecendo:
Ao resgatar os dados do cliente, por exemplo, se ele tiver 10 computadores, os outros dados, perifericos, contatos, atendimentos, etc se repetirão 10 vezes também.
Estou postando o meu código para que vocês possam comentar onde estou errando.
Eu creio que esteja dentro do LEFT JOIN e/ou GROUP BY.
O que acham?
<?php
$cliente = $_GET['cliente'];
$sql = "SELECT
c.*,
pc.*,
pc.descricao_computador AS descricao_pc,
ctt.*,
prf.*,
at.*,
f.*
FROM clientes c
LEFT JOIN computadores pc ON c.id_cliente = pc.id_cliente
LEFT JOIN contatos ctt ON c.id_cliente = ctt.id_cliente
LEFT JOIN perifericos prf ON c.id_cliente = prf.id_cliente
LEFT JOIN atendimentos at ON c.id_cliente = at.id_cliente
LEFT JOIN funcionarios f ON at.id_funcionario = f.id_funcionario
WHERE (c.id_cliente = '$cliente')
ORDER BY contato_nome, descricao_pc ASC";
$queryc = mysql_query($sql);
$querypc = mysql_query($sql);
$queryctt = mysql_query($sql);
$queryprf = mysql_query($sql);
$queryat = mysql_query($sql);
?>
// ### RECUPERAÇÃO NA TELA ###
// DADOS DO CLIENTE - TENDO APENAS 1 RESULTADO FILTRADO PELO ID
<?php $clientes = mysql_fetch_assoc($queryc); ?>
DADOS AQUI NO FORMATO <?php echo $VARIAVELACIMA['CAMPO_TABELA'] ?>
// DADOS DOS CONTATOS - PODENDO TER MAIS DE UM RESULTADO
<?php
while ($ctts = mysql_fetch_assoc($queryctt)) {
?>
DADOS AQUI NO FORMATO <?php echo $VARIAVELACIMA['CAMPO_TABELA'] ?>
<?php
}
?>
// DADOS DOS COMPUTADORES - PODENDO TER MAIS DE UM RESULTADO
<?php
while ($pcs = mysql_fetch_assoc($querypc)) {
?>
DADOS AQUI NO FORMATO <?php echo $VARIAVELACIMA['CAMPO_TABELA'] ?>
<?php
}
?>
// DADOS DOS PERIFERICOS - PODENDO TER MAIS DE UM RESULTADO
<?php
while ($prfs = mysql_fetch_assoc($queryprf)) {
?>
DADOS AQUI NO FORMATO <?php echo $VARIAVELACIMA['CAMPO_TABELA'] ?>
<?php
}
?>
// DADOS DOS ATENDIMENTOS - PODENDO TER MAIS DE UM RESULTADO
<?php
while ($ats = mysql_fetch_assoc($queryat)) {
?>
DADOS AQUI NO FORMATO <?php echo $VARIAVELACIMA['CAMPO_TABELA'] ?>
<?php
}
?>Ton
Obrigado pela ajuda Victor, estou fazendo em DIV.
Sobre a alteração sugerida já havia feito o que você solicitou e ele deixa de mostrar algumas tabelas mesmo sabendo que existem dados nela.
Fiz novamente as alterações e veja como está agora.
Exemplo de como está exibindo agora:
Dados pessoais do cliente OK
Dados dos contatos duplicado de acordo com a quantidade de computadores que o cliente tem
Dados do computador: Não exibe nenhum dado.
Dados dos perifericos: Não exibe nenhum dado.
Dados dos atendimentos: Não exibe nenhum dado.
Exemplo de como estava exibindo no momento do post:
Dados pessoais do cliente OK
Dados dos contatos duplicado de acordo com a quantidade de computadores que o cliente tem
Dados do computador: duplicado de acordo com a quantidade de contatos.
Dados dos perifericos: duplicado de acordo com contatos e computadores.
Dados dos atendimentos: duplicado de acordo com contatos e computadores.
Veja como está a programação agora:
SELECT continua da mesma forma, só alterando as variavéis que você solicitou:
<?php
$cliente = $_GET['cliente'];
$sql = "SELECT
c.*,
pc.*,
pc.descricao_computador AS descricao_pc,
ctt.*,
prf.*,
at.*,
f.*
FROM clientes c
LEFT JOIN computadores pc ON c.id_cliente = pc.id_cliente
LEFT JOIN contatos ctt ON c.id_cliente = ctt.id_cliente
LEFT JOIN perifericos prf ON c.id_cliente = prf.id_cliente
LEFT JOIN atendimentos at ON c.id_cliente = at.id_cliente
LEFT JOIN funcionarios f ON at.id_funcionario = f.id_funcionario
WHERE (c.id_cliente = '$cliente')
ORDER BY contato_nome, descricao_pc ASC";
$query = mysql_query($sql);
?>
Looping:
while ($row = mysql_fetch_assoc($query)) {
Exibição dos dados:
<?php echo $row['nome_do_campo'] ?>
Fiz certo?SELECT continua da mesma forma, só alterando as variavéis que você solicitou:
<?php$cliente = $_GET['cliente'];
$sql = "SELECT
c.*,
pc.*,
pc.descricao_computador AS descricao_pc,
ctt.*,
prf.*,
at.*,
f.*
FROM clientes c
LEFT JOIN computadores pc ON c.id_cliente = pc.id_cliente
LEFT JOIN contatos ctt ON c.id_cliente = ctt.id_cliente
LEFT JOIN perifericos prf ON c.id_cliente = prf.id_cliente
LEFT JOIN atendimentos at ON c.id_cliente = at.id_cliente
LEFT JOIN funcionarios f ON at.id_funcionario = f.id_funcionario
WHERE (c.id_cliente = '$cliente')
ORDER BY contato_nome, descricao_pc ASC";
$query = mysql_query($sql);
while ($row = mysql_fetch_assoc($query)) {
echo " $row['nome_do_campo'] ";
}
?>eu acho q a sua modelagem poderia melhorar.
*os periféricos e computadores poderiam estar em uma mesma tabela, considerando que todos são equipamentos, contendo id do cliente e id do contato para tal equipamento.
*poderia existir a tabela serviços, que ligaria funcionário a equipamento toda vez q tivesse um trabalho, com informações de data, horário, id do equipamento, id do funcionário, etc.
tpw dessa forma q está num vai funcionar muito bem n
em vez disso
você faz só isso$query = mysql_query($sql)
e na hora de exibir você exibe tudo, formatando do jeito q você kizer, eu prefiro em tabela html
while ($row = mysql_fetch_assoc($query)) {
}