Jump to content


Photo

Problemas Com Querys


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

#1 RMA

RMA

    Turista

  • Usuários
  • 36 posts
  • Sexo:Não informado

Posted 26/02/2005, 11:02

Estou com o seguinte problema:

Eu estou fazendo uma pesquisa em uma tabela X para me retornar o código (ID) de um campo, o resultado da pesquisa é o seguinte:

1
1
5
4
5
1
4

Ok, era bem isso q eu queria, porém não queria q os resultados fossem repetidos. Gostaria q o resultado da pesquisa fosse a seguinte:

1
5
4

Então, eu usei o DISTINCT na pesquisa do banco, e teria dado certo se ele não tivesse bagunçado a ordem com que eu pedi os resultados. O DISTINCT realmente tirou a repetição, mas tmb tirou a ordem com que eu pedi a pesquisa.

Bem, como eu faço pra manter a ordem da pesquisa e tirar as repetições??

PS: Desculpem se postei no lugar errado, mas não achei a seção correta.

#2 The bLk

The bLk

    Doutor

  • Usuários
  • 761 posts
  • Sexo:Masculino
  • Localidade:Curitiba - PR

Posted 26/02/2005, 11:08

Desculpe, não entendi bem o que você quer, mas talvez seja isso:

$consulta = mysql_query("SELECT distinct id FROM tabela ORDER by id ASC");

Se não for isso especifique melhor sua dúvida! ;)

#3 RMA

RMA

    Turista

  • Usuários
  • 36 posts
  • Sexo:Não informado

Posted 26/02/2005, 11:18

A pesquisa q estão fazendo é a seguinte:

$consulta = mysql_query ("SELECT DISTINCT Resposta.Topico_Cod_topico FROM Topico, Resposta WHERE Resposta.Topico_Cod_topico = Topico.Cod_topico ORDER BY Resposta.Cod_resposta DESC")


e as minhas tabelas:

+-----------+
|  Topico   |
+-----------+
|Cod_topico |
+-----------+


+-----------------+
|    Resposta     |
+-----------------+
|Cod_resposta   |
|Topico_Cod_topico|
+-----------------+



Se eu fizer essa mesma pesquisa sem o distinct ele retorna o seguinte resultado:

1 1 5 4 5 4

E eu gostaria q o resultado fosse, sem as reptições, mas q mantesse a mesma ordem:

1 5 4

Mas ai quando eu insiro o DISTINCT ele bagunça a ordem, e o resultado é:

4 5 1

Edição feita por: RMA, 26/02/2005, 13:17.


#4 Klaus

Klaus

    @ ubuntu jaunty

  • Ex-Admins
  • 7924 posts
  • Sexo:Masculino
  • Localidade:127.0.0.1

Posted 26/02/2005, 11:19

E?
Klaus Paiva
Conheça também: Taperás

#5 ThalesWeb

ThalesWeb

    Veterano

  • Usuários
  • 1435 posts
  • Sexo:Masculino
  • Localidade:São Paulo - SP

Posted 26/02/2005, 11:27

Veja:

$consulta = mysql_query ("SELECT DISTINCT Resposta.Topico_Cod_topico FROM Topico, Resposta WHERE Resposta.Topico_Cod_topico = Topico.Cod_topico ORDER BY Resposta.Cod_resposta DESC")


Você colocou desc, por isso que está 5 4 1... Coloque ASC no que ficará na ordem crescente:

$consulta = mysql_query ("SELECT DISTINCT Resposta.Topico_Cod_topico FROM Topico, Resposta WHERE Resposta.Topico_Cod_topico = Topico.Cod_topico ORDER BY Resposta.Cod_resposta ASC")


Thales Santos

#6 RMA

RMA

    Turista

  • Usuários
  • 36 posts
  • Sexo:Não informado

Posted 26/02/2005, 11:37

Ok, vou simular uma tabela, ai vcs veem como posso fazer a minha pesquisa de forma correta:

Fórum
+------------+----------+
| Cod_forum  |  Titulo  |
+------------+----------+
|      1     | forum 1  |
+------------+----------+
|      2     | forum 2  |
+------------+----------+



Topico
+------------+-----------------+----------+
| Cod_topico | Forum_Cod_forum |   Titulo |
+------------+-----------------+----------+
|      1     |        1       | Tópico 1 |
+------------+-----------------+----------+
|      2     |        1       | Tópico 2 |
+------------+-----------------+----------+
|      3     |        2       | Tópico 3 |
+------------+-----------------+----------+

Resposta
+--------------+---------------------+--------------+
| Cod_Resposta |   Topico_Cod_topico |Texto_resposta|
+--------------+---------------------+--------------+
|       1      |          1          |  Resposta 1  |
+--------------+---------------------+--------------+
|       2      |          1          |  Resposta 2  |
+--------------+---------------------+--------------+
|       3      |          2          |  Resposta 3  |
+--------------+---------------------+--------------+
|       4      |          3          |  Resposta 4  |
+--------------+---------------------+--------------+
|       5      |          3          |  Resposta 5  |
+--------------+---------------------+--------------+



Traduzindo pra facilitar.

Eu possuo 2 Fóruns.
No fórum 1 eu tenho dois tópicos;
No fórum 2 eu tenho apenas um tópico.

Nos tópicos eu tenho:
3 respostas no tópico numero 1;
1 respostas no tópico 2;
E 2 respostas no tópico 3.

Agora, um pouco de álgebra relacional:

---------------
Sem reclamações...

Edição feita por: Justice, 26/02/2005, 14:54.


#7 RMA

RMA

    Turista

  • Usuários
  • 36 posts
  • Sexo:Não informado

Posted 26/02/2005, 13:20

Você colocou desc, por isso que está 5 4 1... Coloque ASC no que ficará na ordem crescente:


Desculpe, dei apenas um exemplo q acabou confundindo.

Reescrevendo:

Resultado sem DISTINCT

1 1 4 5 4 5 4

Resultado da forma como eu queria:

1 4 5

Resultado com DISTINCT

4 5 1

#8 ThalesWeb

ThalesWeb

    Veterano

  • Usuários
  • 1435 posts
  • Sexo:Masculino
  • Localidade:São Paulo - SP

Posted 26/02/2005, 13:35

Então, coloque order by campo ASC que sairá na ordem que você quer.
Thales Santos

#9 RMA

RMA

    Turista

  • Usuários
  • 36 posts
  • Sexo:Não informado

Posted 26/02/2005, 13:46

Então, coloque order by campo ASC que sairá na ordem que você quer.


Veja bem, acabei de fazer um teste e vi o que está acontecendo:

Eu tenho a seguinte sequencia:
1  1  5  4  4  3

Porém eu não quero repetições, e quero q seja assim:

1  5  4  3

Mas quando eu uso o DISTINCT ele já organiza esses resultados na forma Crescente (ASC):
1 3 4 5

Mas eu não quero isso, quero q ele pegue a ordem q esta no banco, e só tire as repetições, não quero q ele re-organize a sequência numérica.


Então, DarK ThaleS, se eu usar o DESC ou o ASC não importa, pois a ordem q eu quero não é uma sequência lógica.
Se eu usar o DESC ele vai me trazer a sequencia: 5 4 3 1
Se eu usar o ASC ele vai me trazer a sequencia: 1 3 4 5
Mas eu quero a Sequencia: 1 5 4 3


Deu pra entender agora???

#10 ThalesWeb

ThalesWeb

    Veterano

  • Usuários
  • 1435 posts
  • Sexo:Masculino
  • Localidade:São Paulo - SP

Posted 26/02/2005, 13:56

Sim. :rolleyes:

$consulta = mysql_query ("SELECT DISTINCT Resposta.Topico_Cod_topico FROM Topico, Resposta WHERE Resposta.Topico_Cod_topico = Topico.Cod_topico")


Thales Santos

#11 RMA

RMA

    Turista

  • Usuários
  • 36 posts
  • Sexo:Não informado

Posted 26/02/2005, 14:09

Pois então DarK ThaleS, o DISTINCT organiza em ordem numérica os meus resultados, ou seja, ele nao obedece a ordem dos registros do meu BD.

A lógica da sua query está certa, mas por acuas do Distinct não da certo.

#12 Felipe Pena

Felipe Pena

    O temor do Senhor é o princípio da sabedoria

  • Ex-Admins
  • 6441 posts
  • Sexo:Masculino

Posted 26/02/2005, 15:08

Eu fiz um teste com um caso deste tratado neste tópico e ficou da forma que você quer.

Que propriedades tem os campos?

Como está imprimindos os valores da consulta?


[]'s
Felipe Pena
[...] ó terra, terra, terra; ouve a palavra do Senhor. — Jeremias 22:29




1 user(s) are reading this topic

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

IPB Skin By Virteq