Ir para conteúdo

POWERED BY:

Arquivado

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

kim sue il

Utilizando o DISTINCT em um só campo, trazendo os outros campos

Recommended Posts

Gostaria de saber se e possível trazer outros campos utilizando o DISTINCT ou alguma outra função SQL.

 

Por exemplo:

Tabela

Campo1 | Campo2 | Campo3 | Campo4 |

______________________________________|

valor1 | campo | campo | campo |

valor2 | campo | campo | campo |

valor3 | campo | campo | campo |

valor4 | campo | campo | campo |

valor5 | campo | campo | campo |

valor1 | campo | campo | campo |

valor2 | campo | campo | campo |

______________________________________

 

Digamos que eu quisesse trazer todos os valores de Campo1 que fossem distintos, porém, também fosse trabalhar com os outros campos...

 

Se eu fizer: SELECT DISTINTIC Campo1, Campo2, Campo3, Campo4 FROM tabela....

Não encontrará nenhum registro, porque todos eles se repetem em algum lugar, entende?

É um exemplo bem simples que utilizei, mas acho que deu pra entender mais ou menos o que estou buscando... Aguém consegue me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu não entendi muito bem o que vc quer, mas experimenta fazer isso:


SELECT tabela.seu_campo as PRINCIPAL, columns.column_name AS CAMPOS FROM tabela, information_schema.columns WHERE columns.table_name='tabela' GROUP BY tabela.seu_campo order by tabela.seu_campo ASC



Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou precisando a mesma ajuda. Tenho uma lista telefônica onde usei o DISTINCT para que acrescentasse no menu mais um Ramo de Atividade das empresas, cada vez que era criado um novo sem o repetir. Até aí tudo certinho. Mas no Post, fora do menu, onde eu quero que apareça as empresas eu criei uma Div que exibirá o título do ramo. Porém, a div se repete a cada empresa que exibe e não por ramo. Veja na no link: http://www.clictapejara.com/lista-tapejara-rs.php . Vejam que aparece duas vezes a Div Amarela em Supermercados. Gostaria que imprimisse os dois supermercados da Tabela mas apenas uma Div por ramo de atividade.

Abaixo meu codigo do menu e do post, lembrando que o menu funcionou certinho:

 

<div id="menubv"><ul id="menuver">
<?php
$strSQL = ("SELECT DISTINCT(Ramo)FROM Lista_Tapejara_RS ORDER BY Ramo") or die(mysql_error());
$rs = mysql_query($strSQL);
while($row = mysql_fetch_array($rs)) {
echo "<li><a href='#".$row['Ramomenu']."'>".$row['Ramo']."</a></li>"; }
?>
</ul>
<br /><br /><br />
</div>
</div> <!-- FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FIM DA SIDEBAR 1 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -->
<!-- ******************************************************* INICIO DO CONTEUDO *************************************** -->
<div id="post">
<div class="imagem">
<img src="images/gifs/aqui2.gif" alt="Buscar" align="middle" style="width:90px; height:50px; margin-left:60px; border:0px; float:left;" />
<br /><br /><br />
</div>
<div class="cadastrar">
<span>CLIQUE AQUI PARA CADASTRAR <br />SUA EMPRESA GRÁTIS!</span>
</a>
</div>
<br /><br />
<div class="lista-geral">
<?php
$clic = mysql_query ("SELECT * FROM Lista_Tapejara_RS ORDER BY Empresa") or die(mysql_error());
if(@mysql_num_rows($clic) == 0){echo "Seja o primeiro a Cadastrar sua Empresa neste Ramo!";}
while($row = mysql_fetch_array($clic)){
{echo "<div class='barra-titulo'>".$row['Ramo']."</div>";}
echo "<h1>".$row['Empresa']."</h1>";
echo "<div class='descreve'>
<div class='telefones'><table border='0' cellspacing='0' cellpadding='0'><tr><td>
<img src='images/fone.png' alt='telefone' align='middle' style='width:35px; height:35px; padding:5px 0px; border:0px;' /></td><td valign='middle'>
<span style='font-size:14px; color:#900;padding:10px 0px;'> (".$row['DDD'].")</span><span style='color:#900; padding:10px 0px; font-size:25px; font-weight:bold;'> ".$row['Telefone1']. "</span>    ou    <span style='font-size:14px; padding:10px 0px; color:#300;'>(".$row['DDD'].") </span><span style='font-size:25px; color:#300; padding:10px 0px;;'>".$row['Telefone2']."</span></td></tr></table>
<p>Rua: ".$row['Rua'].", ".$row['Numero']."<br />
Complemento: ".$row['Complemento']."<br />
Bairro: ".$row['Bairro']."    CEP: ".$row['CEP']." Cidade: ".$row['Cidade']." - ".$row['Estado']."</p>
</div>
</div>";
echo "<br />
<p><a href='#'><span style='color: #000000; cursor:hand; font-weight:bold; font-size:14px'>Clique para ir ao Topo da Página</span></a></p>";
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

É preciso algum cuidado ao usar DISTINCT, queries com mais de uma tabela geram um produto cartesiano, as regras de join devem ser usadas para evitar o produto cartesiano indevido, mas em algumas condições queremos este produto cartesiano indevido.

 

Exemplo

 

temos Clientes---<assina>---revista

 

se quisermos uma lista de clientes que assinem alguma revista podemos fazer :

 

 

select cliente.codigo,cliente.nome

from cliente,assina

where cliente.codigo = assina.codigo_cliente

só que aqui tem um porém se o infeliz assinar mais de revista vai aparecer o nome repetido quantas revistas ele assine, assim podemos fazer :

 

select distinct cliente.codigo,cliente.nome

from cliente,assina

where cliente.codigo = assina.codigo_cliente

Neste caso podemos optar o DISTINCT para não fazer um subselect por exemplo.

 

MAS , tome um cuidado ao usar DISTINCT para solucionar uma query pois PODE mascarar um problema, que pode ser :

 

-Faltou uma condição de igualdade do JOIN

 

-Uma tabela entrou de gaiata (sem necessidade)

 

-Existe duplicidade de registros na tabela (integridade referencial bichada)

 

Na documentação do DISTINCT deveria vir um aviso dos tipos da bula.

 

USE COM CUIDADO !!!

 

:)

 

Espero ter ajudado.

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.