Jump to content


Photo

Imprimindo Dados Repetidos


  • Faça o login para participar
16 replies to this topic

#1 tiago_me

tiago_me

    Novato no fórum

  • Usuários
  • 21 posts
  • Sexo:Masculino
  • Localidade:Porto Alegre

Posted 19/02/2010, 08:53

BOm dia pessoal, tenho uma consulta no banco, onde mostro todos os equipamentos, e tenho vários registros com o mesmo equipamento

equipamento 1, codigo 1, certificado 1
equipamento 1, codigo 2, certificado 2
equipamento 2, codigo 3, certificado 3
e ai vai..
Gostaria de saber se tem alguma forma de mostrar apenas uma vez cada equipamento, e quando for inserido algo no equipamento 1 por exemplo, inserir em todos equipamentos 1.
A consulta estou fazendo assim, andei pesquisando, e pelo que vi, para imprimir apenas 1 vez, usa-se o DISTINCT, só que está me dando erro de sintaxe pela forma que estou fazendo.
Desde já agradeço!

$consulta = mysql_query("select c.*, s.*, d.*, e.* from usuario d, certificado c, fornecedores s, equipamento e where d.usuario = '$login_usuario' and d.Fornecedor = s.fornecedor and c.numero_certificado = e.numero_certificado and c.fornecedor = s.fornecedor and s.fornecedor = d.fornecedor and !LENGTH(e.data_f) > 0 order by e.equipamento")or die(mysql_error());;


#2 MBA

MBA

    24 Horas

  • Usuários
  • 412 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte
  • Interesses:Desenvolvimento WEB

Posted 19/02/2010, 09:09

Bom dia amigo.
Tudo bom?

Seria com o DISTINCT mesmo.
Como está a query com o DISTINCT?

Poste ela aqui que lhe ajudamos a montar corretamente.

Abraços e até a próxima.
Mateus
Mateus Antunes
MBASistemas

#3 Willian Gustavo Veiga

Willian Gustavo Veiga

    12 Horas

  • Usuários
  • 175 posts
  • Sexo:Masculino

Posted 19/02/2010, 09:11

Bom dia, tudo bem?

O que significa "e quando for inserido algo no equipamento 1 por exemplo, inserir em todos equipamentos 1."? O que é inserido? Como? Qual a finalidade do código.
Não sei se é isso mas que você quer mas você pode utilizar GROUP BY.

Um abraço, tudo de bom.
Posted Image

#4 tiago_me

tiago_me

    Novato no fórum

  • Usuários
  • 21 posts
  • Sexo:Masculino
  • Localidade:Porto Alegre

Posted 19/02/2010, 09:15

Olá Matheus, desde já obrigado pela ajuda!
Eu não tenho muito conhecimento ainda, da sintaxe do php, faz pouco tempo que começei
Eu tentei de várias formas, uma delas foi esta, mas não está dando certo. :(
$consulta = mysql_query("select c.*, s.*, d.*, e.* DISCTINCT(e.equipamento) from usuario d, certificado c, fornecedores s, equipamento e where d.usuario = '$login_usuario' and d.Fornecedor = s.fornecedor and c.numero_certificado = e.numero_certificado and c.fornecedor = s.fornecedor and s.fornecedor = d.fornecedor and !LENGTH(e.data_f) > 0 order by e.equipamento")or die(mysql_error());;

Olá Wiliian, a inserção que eu disse, eu acho que sei como fazer já, o problema seria esse só.
Mostrar apenas uma vez valores iguais do banco, eu tenho vários equipamentos na tabela, e muitos deles são repetidos, pois, eu ligo esta tabela a outras, um exemplo é os certificados, um equipamento pode ter vários certificados, me entende?

#5 Willian Gustavo Veiga

Willian Gustavo Veiga

    12 Horas

  • Usuários
  • 175 posts
  • Sexo:Masculino

Posted 19/02/2010, 09:19

Como está a estrutura do seu banco de dados?

Um abraço :)
Posted Image

#6 tiago_me

tiago_me

    Novato no fórum

  • Usuários
  • 21 posts
  • Sexo:Masculino
  • Localidade:Porto Alegre

Posted 19/02/2010, 09:22

O banco de dados está assim:

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

--
-- Estrutura da tabela `admin`
--

CREATE TABLE IF NOT EXISTS `admin` (
  `id_admin` int(11) NOT NULL auto_increment,
  `login_admin` varchar(255) NOT NULL,
  `senha_admin` varchar(255) NOT NULL,
  PRIMARY KEY  (`id_admin`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ;


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

--
-- Estrutura da tabela `certificado`
--

CREATE TABLE IF NOT EXISTS `certificado` (
  `id_certificado` int(11) NOT NULL auto_increment,
  `data` varchar(255) NOT NULL,
  `numero_certificado` varchar(255) NOT NULL,
  `fornecedor` varchar(255) NOT NULL,
  `pdf` varchar(255) NOT NULL,
  `data_final` varchar(255) NOT NULL,
  PRIMARY KEY  (`id_certificado`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=170 ;



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

--
-- Estrutura da tabela `data_nova`
--

CREATE TABLE IF NOT EXISTS `data_nova` (
  `id_final` int(11) NOT NULL auto_increment,
  `equipamento` int(10) NOT NULL,
  `id_fornecedor` varchar(100) NOT NULL,
  `data_nova` varchar(100) NOT NULL,
  `peri` varchar(100) NOT NULL,
  PRIMARY KEY  (`id_final`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=71 ;


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

--
-- Estrutura da tabela `equipamento`
--

CREATE TABLE IF NOT EXISTS `equipamento` (
  `id_equipamento` int(11) NOT NULL auto_increment,
  `numero_certificado` varchar(255) NOT NULL,
  `fornecedor` varchar(255) NOT NULL,
  `equipamento` varchar(255) NOT NULL,
  `data_f` varchar(255) NOT NULL,
  PRIMARY KEY  (`id_equipamento`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=46 ;


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

--
-- Estrutura da tabela `fornecedores`
--

CREATE TABLE IF NOT EXISTS `fornecedores` (
  `ID` int(10) NOT NULL auto_increment,
  `Fornecedor` varchar(255) default NULL,
  `senha` varchar(255) default NULL,
  PRIMARY KEY  (`ID`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=65 ;


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

--
-- Estrutura da tabela `usuario`
--

CREATE TABLE IF NOT EXISTS `usuario` (
  `ID` int(10) NOT NULL auto_increment,
  `usuario` varchar(255) default NULL,
  `fornecedor` varchar(255) default NULL,
  `senha` varchar(255) default NULL,
  PRIMARY KEY  (`ID`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=36 ;



Abraçoo!

Edição feita por: tiago_me, 19/02/2010, 09:23.


#7 MBA

MBA

    24 Horas

  • Usuários
  • 412 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte
  • Interesses:Desenvolvimento WEB

Posted 19/02/2010, 09:36

Tiago, o DISTINCT é usado antes do campo que deve ser único.
No seu caso, tente retirar os * e selecionar apenas os campos que for usar.
Isso pode ajudar ao adicionar o DISTINCT.

Teste ai e poste aqui a query resultante =D
Abraços
---
Editando

Dada a estrutura de tabelas, o que exatamente quer exibir?
Talvez um GROUP te ajude também...

Abraços

Edição feita por: MBA, 19/02/2010, 09:39.

Mateus Antunes
MBASistemas

#8 tiago_me

tiago_me

    Novato no fórum

  • Usuários
  • 21 posts
  • Sexo:Masculino
  • Localidade:Porto Alegre

Posted 19/02/2010, 09:47

a maneira correta de imprimir apenas 1 dos equipamentos, seria com o DISTINCT?
porque no momento que eu insiro no banco, eu insiro em um formulário, com os campos
equipamento, nº certificado, fornecedor, data, etc...
Só que nessa página ai, eu tenho que mostrar todos os equipamentos cadastrados, e como tenho vários equipamentos 1, 2, etc. tenho que mostrar apenas 1 vez.
Nessa consulta que estou fazendo tem como fazer isso?

Tá blz Matheus, vou tentar aqui!
Abraço!

Tentei desta forma, ele segue dando erro de sintaxe, quando você falou para retirar os *, era para todos?
É que eu preciso de alguns dados dessas tabelas, para saber quando o usuario loga, quais os seus equipamentos, certificados, etc.
Desta forma que estou fazendo não tem como fazer?
$consulta = mysql_query("select c.*, s.*, d.*, e DISTINCT (equipamento) from usuario d, certificado c, fornecedores s, equipamento e where d.usuario = '$login_usuario' and d.Fornecedor = s.fornecedor and c.numero_certificado = e.numero_certificado and c.fornecedor = s.fornecedor and s.fornecedor = d.fornecedor and !LENGTH(e.data_f) > 0 order by e.equipamento")or die(mysql_error());;

Edição feita por: tiago_me, 19/02/2010, 09:39.


#9 MBA

MBA

    24 Horas

  • Usuários
  • 412 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte
  • Interesses:Desenvolvimento WEB

Posted 19/02/2010, 09:50

Tente ai depois poste o resultado Tiago.
Mas tem outra coisa...
Se o objetivo é exibir apenas os equipamentos, porque busca informações das outras tabelas?

Alguma coisa assim:
SELECT DISTINCT id_equipamento FROM equipamento

Abraços
Mateus Antunes
MBASistemas

#10 tiago_me

tiago_me

    Novato no fórum

  • Usuários
  • 21 posts
  • Sexo:Masculino
  • Localidade:Porto Alegre

Posted 19/02/2010, 09:56

é que eu tenho que ter o dado data, e o dado fornecedor, pois preciso enviar eles pelo metodo post, posteriormente.
e preciso dos outros dados para fazer a verificação, que faço na consulta, se o usuario é igual ao usuario que está logado, se o numero de certificado que está na tabela certificados, é igual ao numero de certificado que está na tabela equipamentos.
por isso preciso destes dados.

#11 MBA

MBA

    24 Horas

  • Usuários
  • 412 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte
  • Interesses:Desenvolvimento WEB

Posted 19/02/2010, 10:13

Entendi.
Então não tem remédio... =D

Qual o resultado apresentado ao retirar os * e passar o DISTINCT para esquerda do campo único?
Se não der certo, não esqueça de colocar a query aqui para procurarmos o erro.

Abraços
Mateus Antunes
MBASistemas

#12 tiago_me

tiago_me

    Novato no fórum

  • Usuários
  • 21 posts
  • Sexo:Masculino
  • Localidade:Porto Alegre

Posted 19/02/2010, 10:18

isso que tentei agora aqui, não é permitido né? eu tirei o * do e, que era da tabela equipamento, e coloquei o distinct
$consulta = mysql_query("select c.*, s.*, d.*, DISTINCT equipamento from equipamento from usuario d, certificado c, fornecedores s, equipamento e where d.usuario = '$login_usuario' and d.Fornecedor = s.fornecedor and c.numero_certificado = e.numero_certificado and c.fornecedor = s.fornecedor and s.fornecedor = d.fornecedor and !LENGTH(e.data_f) > 0 order by e.equipamento")or die(mysql_error());;

ele me deu erro de sintaxe também!
alguma forma de apenas usar o DISTINCT para a tabela equipamento não tem como fazer ai né?
Abraçooos!!!

Edição feita por: tiago_me, 19/02/2010, 10:22.


#13 Tonini

Tonini

    12 Horas

  • Usuários
  • 130 posts
  • Sexo:Masculino

Posted 19/02/2010, 10:26

Uma outra maneira é usar consultas separadas.
Você seleciona um equipamento e faz a consulta dos seus certificados...
CalvinBall.
Any player may declare a new rule at any point in the game.
The player may do this audibly or silently...

#14 tiago_me

tiago_me

    Novato no fórum

  • Usuários
  • 21 posts
  • Sexo:Masculino
  • Localidade:Porto Alegre

Posted 19/02/2010, 10:29

pois é, eu pensei nisso, só que eu imprimo os dados da consulta em um while.
Como faria para imprimir duas consultas nesse while?

isso não é permitido né?
while($linha = @mysql_fetch_array($consulta, $consulta2))

if (!empty($consulta))
{ 
while($linha = @mysql_fetch_array($consulta)) {
$equipamento = $linha["equipamento"];
$dt = $linha["data"];
$data_f = $linha["data_f"];
list($dia,$mes,$ano) = explode('/',$dt);
$data_anterior = $ano.$mes.$dia;
if ((empty($data_f2)))
{
	$cont++;
} 
?>
        <td width="39%" align="left" valign="top" class="textomeioo3">Equipamento:
          <input name="equipamento[]" type="hidden" value="<?php echo $equipamento; ?>" /></td>
        <td width="1%" align="left" valign="top" class="textocentro20"><?php echo $equipamento; ?></td>
        <td width="22%" align="right" valign="top" class="textomeioo2">Periodo:</td>
        <td width="38%" align="right" valign="top" class="textomeioo2"><label>
          <input name="periodo[]" type="text" id="periodo[]" size="15" />
          <input name="data[]" type="hidden" value="<?php echo $data_anterior; ?>" />
          <input name="fornecedor[]" type="hidden" value="<?php echo $fornecedor; ?>" />
        </label></td>
      </tr>
      <?php } ?>
    </table></td>
  </tr>
        <?php }
		
		if (empty($cont)) {
		?>
            <td class="textocentro2" align="center" valign="top"><font color="#FF0000">
			Todos os equipamentos já foram Cadastrados!</font><br /><br /><br />
            <a href="index.php?link=12" class="link">Clique aqui para acessar a lista deste mês.</a>
		<?php }?></td>



#15 MBA

MBA

    24 Horas

  • Usuários
  • 412 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte
  • Interesses:Desenvolvimento WEB

Posted 19/02/2010, 10:30

O DISTINCT não é para a tabela e sim para a coluna.
Viu o exemplo que coloquei acima?

Tente retirar todos os * para estruturar melhor a query e só buscar os dados que realmente for usar.
Pode dar um pouco de trabalho mas valerá a pena.

Depois que acabar, se não der certo, volte ai com a query que vamos lhe ajudando.

Abraços
Mateus
Mateus Antunes
MBASistemas




0 user(s) are reading this topic

0 membro(s), 0 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq