Ir para conteúdo

POWERED BY:

Arquivado

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

ederson_mello

[Resolvido] Php não repetir dados da consulta

Recommended Posts

Fala galera, estou eu aqui novamente questionando os mais experientes.

 

Seguinte, estou fazendo uma consulta a uma tabela de minha base de dados, mas gostaria que ela não retornasse dois valores iguais, ou não mostrasse um valor mais que uma vez.

 

Por exemplo,

 

Tenho uma tabela chamada musicas que contem os campos

 

nome;

autor;

tom;

 

Várias músicas podem ter como tom a letra C. Tenho um arquivo que vai organizar as músicas por tom. Como elas podem ter o mesmo tom, gostaria que mostrasse somente uma vez cada tom neste arquivo.

 

Por exemplo A - B - C - D - Dm e não mostrar todos os tons de todas as músicas (A - A - A - B - B - Dm - DM) mostrando tantos tons quanto a quantidade de músicas.

 

Fui meio repetitivo mas penso que fui claro.

 

Agradeço aos amigos...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seu comando SQL deve ficar assim:

"SELECT * DISTINCT FROM tabela..."...

Agradeço a atenção jovem, mas não funcionou. Retorna um erro mysql:

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mostre o teu código, e a estrutura da tabela.

Está acusando erro de sintaxe(sql) ou de passagem de parâmetros..

 

Já ouviu falar sobre GROUP BY ? no teu caso, acho que não seria o mais correto, mas funcionará.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mostre o teu código, e a estrutura da tabela.

Está acusando erro de sintaxe(sql) ou de passagem de parâmetros..

 

Já ouviu falar sobre GROUP BY ? no teu caso, acho que não seria o mais correto.

 

if ($operacao=="tom")
	{
	echo "Classificadas por Tom<br><br>";
		$resultado = mysql_query ("SELECT * FROM cifra ORDER BY tom ASC");
		$linhas = mysql_num_rows ($resultado);
		for ($i=0; $i<$linhas; $i++)
			  {
			  $reg = mysql_fetch_row($resultado);  
			  echo "<a href=#>$reg[4]</a> - ";						
			  }
		echo "<br><br><a href=index.php>Voltar ao início.</a>";
	}

Desta maneira ele retorna normalmente, só que repetindo o valor de tom.

Compartilhar este post


Link para o post
Compartilhar em outros sites

E como ficou a tentativa que deu erro??

 

Para ver o erro que o mysql gerou, coloca assim

 

$resultado = mysql_query ("SELECT DISTINCT * FROM cifra ORDER BY tom ASC") or die (mysql_error());

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites
$resultado = mysql_query ("SELECT DISTINCT tom FROM cifra ORDER BY tom ASC");

ou algo com o GROUP BY..

Compartilhar este post


Link para o post
Compartilhar em outros sites

E como ficou a tentativa que deu erro??

 

Para ver o erro que o mysql gerou, coloca assim

 

$resultado = mysql_query ("SELECT DISTINCT * FROM cifra ORDER BY tom ASC") or die (mysql_error());

Carlos Eduardo

Tentei desta maneira, retornou a consulta normal repetindo os dados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual erro amigo ?

Posta a estrutura da tabela ai.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faça a consulta normalmente, crie um array com a consulta usando mysql_fetch_array e depois trate este array com array_unique() para retirar entradas iguais no array.

Não vai dar certo, já que o resultado do mysql_fetch_array obtem apenas uma linha, para obter todas as linhas, seria necessário criar um loop com um array contendo apenas o 'tom' e o 'id' da linha;

//criando uma matriz com 'todos' os resultados
while($line = mysql_fetch_assoc($query)){
$array[] = $line['tom'];
$rows[] = $line;
}

//agora sim, retirando os repetidos 
$array = array_unique($array);


//imprimindo

foreach($array  as $key => $value){

echo $rows[$key]['tom'];
echo $rows[$key]['id'];

}
Isto seria uma das saídas, porém seria um forma desnecessária, e mais lenta, realmente GROUP BY, eh uma mão na roda :

Como você esta agrupando ?

SELECT * FROM cifra GROUP BY tom ORDER BY tom ASC

 

Tente descobrir o erro, usando 'or die(mysql_error())' depois da mysql_connect(), ...query(), entre outros. Use apenas para isto!

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fernando, a função mysql_fetch_array retorna um ARRAY.

 

Só para te mostrar que isso "já que o resultado do mysql_fetch_array obtem apenas uma linha" não é certo, faça isso.

 

print_r(mysql_fetch_assoc(mysql_query('ALGUMA QUERY COM VARIOS RESULTADOS')));

Faça isso e veja se retorna só uma linha.

 

Estude as funcionalidades de se fazer um laço. Antes eu tambem pensava que tinha que fazer um laço para pegar os valores do mysql_fetch_array, mas com o tempo fui aprendendo que é diferente.

 

Bons estudos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

mysql_fetch_assoc — Obtém um linha do resultado como uma matriz associativa

Faça o teste você mesmo, mas estou certo que segundo o php.net está é sua função.

Mas é lógico que jamais deve-se usar um codigo destes, pois se tiver 1milhão de linhas no db, ele ira listar, e processar e só depois exibir.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, dá para ver que nunca fez um sistema de médio porte.

Aquilo é tradução mal feita do PHP.

 

Se olhar bem na descrição, olha o que diz:

 

Retorna uma matriz associativa que corresponde a linha obtida e move o ponteiro interno dos dados adiante. mysql_fetch_assoc() é equivalente a utilizar mysql_fetch_array() com MYSQL_ASSOC para o segunto parâmetro, que é opcional. Ela apenas retorna a matriz associativa.

Continuo minha sugestão. Estude PHP.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que eu quiz dizer com "já que o resultado do mysql_fetch_array obtem apenas uma linha" foi que se chamada apenas uma vez para 'x' query ela retorna apenas uma linha na matriz (e move o ponteiro é claro) a primeira linha - linha 0 -, isto que eu quiz dizer; e outra para o solução proposta, um loop seria exigido - leia o meu code para entender - , pois array_unique() não ia categorizar duas linhas do array como iguais e assim manter apenas uma.

 

A propósito, já sigo sua sugestão ^_^

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

$sql = "SELECT * FROM cifra ORDER BY tom ASC";
$query = mysql_query($sql,$conn);
while($dados = mysql_fetch_assoc($query))
{
echo $dados['id'];
echo $dados['tom'];
}

tenta

 

valw =]

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala rapaziada...

 

Desculpe minha ausência no finde...

 

Consegui fazer com o GROUP BY.

 

Agradeço a atenção e o empenho de todos vcs.

 

Valeu mesmo Galera!!!

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.