Jump to content


Photo

Problemas Com Distinct Em Busca Com Dado Dinâmico


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

#1 blecko

blecko

    Normal

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

Posted 23/07/2007, 01:10

Olá,

seguinte, estou usando um fórum IPB (igual a esse), ocorre que no meu site eu quero procurar TODOS os usuários que já postaram no fórum com ID 64.

Ok, eu faço a busca, consigo resgatar os usuários sem repetir, porém, eles não repetem no mesmo tópico, pois quando muda o ID do tópico, o DISTINCT não diferencia.

Vou explicar melhor com o código que eu tenho até aqui.

$Qtopics = "SELECT * FROM ipb_topics WHERE forum_id='64'"; #seleciona os tópicos do fórum 64
$Rtopics = mysql_query($Qtopics);
while ($row = mysql_fetch_assoc($Rtopics))
{
$Qposts = "SELECT DISTINCT author_name FROM ipb_posts WHERE topic_id='".$row['tid']."' ORDER BY author_name ASC"; #seleciona os campos 'author_name' sem repetir, nos tópicos iguais a "$row['tid']" (que foram selecionados anteriormente), organizados em ordem alfabética pelo 'author_name'
$Rposts = mysql_query($Qposts);
while ($r = mysql_fetch_assoc($Rposts))
{
print $r['author_name'];
}
}



Ok, mas por exemplo, se eu tenho os seguintes dados na tabela mysql.

Tabela ipb_topics: (tid = ID do tópico; forum_id = ID do fórum)
tid | forum_id |
1 | 64 |
2 | 64 |
3 | 64 |


Tabela ipb_posts: (pid = ID do post; author_name = nome do usuário; topic_id = ID do tópico)
pid | author_name | topic_id
1 | José | 1
2 | João | 2
3 | Luana | 3
4 | José | 2
5 | João | 3
6 | Luana | 1
7 | Luana | 2
8 | Luana | 2
9 | Luana | 2
10 | José | 1



Ok, digamos que tenha 3 tópicos no fórum 64, o José postou no 1 (2 vezes) e no 2, o João postou no 2 e no 3 e a Luana postou no 1, 2 (3 vezes) e 3

Eu gostaria que meu código retornasse assim:
João
José
Luana

Mas ele vai retornar assim:
José
Luana
João
José
Luana
João
Luana

Entenderam? Ele vai listar os usuários que postaram no tópico 1, sem repetir; depois os que postaram no tópico 2, sem repetir; e finalmente os que postaram no tópico 3, sem repetir também. Mas no final, vai acabar aparecendo mais de uma vez o mesmo nome, por que ele usou o DISTINCT separadamente em cada tópico, e não em toda a operação.

Eu acredito que o erro esteja lá naquela pesquisa pelos posts, em que eu botei "where topic_id='".$row['tid']."'", acho que a forma como eu to pesquisando tá errada, deveria ser tudo junto, certo? Mas como vou especificar o fórum, porque IPB possui a tabela de TÓPICOS, onde mostra os IDs deles e tal e o fórum onde foram postados, e a tabela de POSTS, que mostra os IDs deles e o ID dos tópicos onde eles foram postados, mas não mostra (na tabela de posts) o fórum onde foi postado. Então eu PRECISO fazer uma consulta na tabela de tópicos, pra especificar que eu quero os tópicos somente do fórum 64.

Entenderam mais ou menos o que eu quero?

Espero que sim, um abraço e obrigado pela ajuda!

Edição feita por: blecko, 23/07/2007, 01:15.

blecko ~ GunzArsenal.Com

Venda de espaço publicitário no www.GunzArsenal.com na forma de Banners e troca de links, tenho pagerank 4.

Clique aqui para ver mais informações e os formatos de anúncio no Gunz Arsenal


#2 Felipe Pena

Felipe Pena

    O temor do Senhor é o princípio da sabedoria

  • Ex-Admins
  • 6441 posts
  • Sexo:Masculino

Posted 23/07/2007, 08:35

No caso então você deve usar:

SELECT DISTINCT author_name, pid FROM ipb_posts WHERE topic_id='".$row['tid']."' ORDER BY author_name ASC

O distinct assim não permitirá que repita um author_name com o mesmo pid.

Embora acredite que essa forma fique mais otimizada:

SELECT author_name FROM ipb_posts WHERE topic_id='".$row['tid']."' GROUP BY author_name, pid ORDER BY NULL

Referências
- http://dev.mysql.com...timization.html
- http://dev.mysql.com...timization.html

Edição feita por: Eclesiastes, 23/07/2007, 08:36.

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

#3 blecko

blecko

    Normal

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

Posted 26/07/2007, 14:30

Amigo, a solução acima não resolveu, ela continuou repetindo os dados. Então o que eu fiz foi o seguinte, criei uma tabela pra adicionar os nicks selecionados e depois eu resgato os dados com o DISTINCT. Como tá tudo na mesma tabela, fica mais fácil.

Aí usei um TRUNCATE pra resetar a tabela, depois eu pego os dados da ipb_topics e da ipb_posts e adiciono todos eles na tabela que eu resetei (com o truncate), em seguida eu resgato esses dados com o DISTINCT e pronto, deu certo =D

Lembrando que toda vez que a página é atualizada ocorre o truncate.

É isso, abração!
blecko ~ GunzArsenal.Com

Venda de espaço publicitário no www.GunzArsenal.com na forma de Banners e troca de links, tenho pagerank 4.

Clique aqui para ver mais informações e os formatos de anúncio no Gunz Arsenal





1 user(s) are reading this topic

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

IPB Skin By Virteq