Ir para conteúdo

POWERED BY:

Arquivado

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

Rafael Pelizza

TOP 5 mysql

Recommended Posts

Fala galera, sou novato aqui e novato tbm em php.. rs..

Estou com a seguinte dúvida:

 

Quando uma pessoa loga no meu site, o LOGIN dessa pessoa vai pra um banco de dados (tabela) diferente chamada top5 e dentro dessa tabela eu tenho os campos ID_TOP (auto increment) e o campo LOGIN_TOP...

Ai, por exemplo, o joao logou, vai estar lá na tabela top5 id1 login_top joao, certo?

c ele desloga e loga de novo, vai pro id2 e no login_top joao novamente..

 

dae digamos que tenho lá na tabela os seguinte valores:

 

ID_TOP | LOGIN_TOP

1 | claudio

2 | angela

3 | claudio

4 | claudio

5 | marcela

6 | daniela

7 | angela

8 | claudio

9 | angela

10 | daniela

 

 

Como podemos ver, o nome claudio aparece 4 vezes (foi a pessoa que mais logou no site), em segundo lugar está a "angela" com 3 logins, em terceiro lugar a "daniela" com 2 logins, etc....

 

Como eu faço um select na minha tabela e um "TOP5" disso e me mostre no php o resultado:

"1 lugar - Claudio

2 lugar - Angela

3 lugar - daniela

4 lugar - fulano

5 lugar - fulano2"?

 

Agradeço desde já! obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, Rafael. Tudo bem? Espero que sim.

 

Bom, a sua dúvida entra mais pra MySQL, portanto, creio que esteja na área incorreta, mas vou tentar te ajudar assim mesmo.

 

Para fazer com que apareça o top 5 é simples, basta fazer um SELECT:

SELECT * FROM `top5` WHERE login_top = `$var` LIMIT 5

 

Espero ter te ajudado.

Qualquer dúvida, poste! ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então cara, até tentei assim, mas não ta resultando em nada.. E sinceramente não entendi o pq daquele "$var" ali eheh..

eu to fazendo assim, e não retorna erro nenhum... Como disse, sou novato em php e garanto que to quebrando a cabeça já faz tempo com isso ehehe

 

 

<?php
$data = mysql_query("SELECT * FROM 'top5' WHERE nome_top = '$var' LIMIT 5");
echo $data;
?>

 

tentei assim tbm:

 

<?php
$data = mysql_query("SELECT login_top FROM top5 WHERE login_top LIMIT 5");
echo data;
?>

 

mas assim me retorna isso: Resource id #14

 

hellpppppp

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, Rafael.

 

Então, eu que me equivoquei botando o $var ali. Confesso, tenho bastante coisa na cabeça e acabei misturando as bolas.

 

Na verdade, a query ficaria assim:

 

SELECT * FROM `top5` LIMIT 0,5

 

Tente.

 

Abraços! ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

e assim tbm:

 

<?php
$data = mysql_query("select * from top5 where login_top in(select login_top from top5 group by login_top having count(*) > 1) order by login_top");
echo $data;
?>

 

e não deu...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Rafael? Você tentou a última solução que te passei?

 

SELECT * FROM `top5` LIMIT 0,5

 

O que você está querendo fazer é totalmente diferente dessas querys aí. Pelo que sei, você quer simplesmente definir os últimos 5 usuários logados, certo? Se sim, na query que resgata os valores da tabela deve-se definir um LIMIT 0,5 para que somente os primeiros 5 apareçam.

 

Abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faça:

 

<?php
$SQL = mysql_query("SELECT * FROM `top5` LIMIT 0,5");
$data = mysql_fetch_assoc($SQL);
echo $data;
?>

 

 

Kami, fiz isso e o resultado retornado foi: "Array"

Escreveu na tela Array e nada mais...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nossa, fiz errado novamente. Paciência comigo... essa vida de ajudante leigo não é fácil. :P

 

Então, tente agora:

$SQL = mysql_query("SELECT * FROM `top5` LIMIT 0,5");
while($data = mysql_fetch_assoc($SQL)){
echo $data["nome_top"];
}

 

Ou então substitua o nome_top pelo nome da coluna que você deseja exibir vindo da tabela.

 

Abraço! ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nossa, fiz errado novamente. Paciência comigo... essa vida de ajudante leigo não é fácil. :P

 

Então, tente agora:

$SQL = mysql_query("SELECT * FROM `top5` LIMIT 0,5");
while($data = mysql_fetch_assoc($SQL)){
echo $data["nome_top"];
}

 

Ou então substitua o nome_top pelo nome da coluna que você deseja exibir vindo da tabela.

 

Abraço! ;)

 

 

 

Opa! Tá começando a dar certo! rs...

Mas ele tá ordenando errado..

Tipo, ele ta mostrando as 5.. mas as 5 primeiras da tabela, e não os TOP 5 logins!

O certo seria mostrar Claudio em 1 lugar, angela em 2, daniela em 3, etc, etc, como no exemplo que citei.

E eu que peço paciência comigo.. ehehhe vlw

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pois é, o que um while não faz, né? B)

 

Pois bem, para ordenar pelos usuários com mais logins (com quebra de linha incluso) faça:

$SQL = mysql_query("SELECT * FROM `top5` ORDER BY `login_top` DESC LIMIT 0,5");
while($data = mysql_fetch_assoc($SQL)){
echo $data["nome_top"].'<br/>';
}

 

Abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tá quase Kaminari! rs..

Agora ele pegou do meio da tabela.. bem do meio mesmo e foi pegando os 5 de baixo pra cima...

De 18 registros, ele foi pegou o login_top do registro 11, do registro 10, 9,8 e 7..

Compartilhar este post


Link para o post
Compartilhar em outros sites

$SQL = mysql_query("SELECT * FROM `top5` ORDER BY `login_top` ASC LIMIT 0,5");
while($data = mysql_fetch_assoc($SQL)){
echo $data["nome_top"].'<br/>';
}

 

Erro meu, de novo. Estava buscando os resultados em ordem descrescente. Agora em ordem crescente deve funcionar.

 

Abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tá quase Kaminari! rs..

Agora ele pegou do meio da tabela.. bem do meio mesmo e foi pegando os 5 de baixo pra cima...

De 18 registros, ele foi pegou o login_top do registro 11, do registro 10, 9,8 e 7..

 

 

Opa, olha só!

mudei algumas coisinhas aqui e tá melhorando mais ainda

 

o código tá assim agora:

 

<?php
$SQL = mysql_query("select * from top5 where nome_top in(select nome_top from top5 group by nome_top having count(*) > 1) order by nome_top");
while($data = mysql_fetch_assoc($SQL))
 {
  echo $data["nome_top"].'<br/>';
 }
?>

 

Ele listou o que tem mais registro e tal.. Mas ele ta listando TODOS registros da tabela e da seguinte forma:

O nome que tem mais registros, ele lista todos, tipo:

Claudio

Claudio

Claudio

Claudio

 

dae o segundo com mais registro, tipo:

 

Daniela

Daniela

 

e assim por diante, sabe? o que predcisaria mudar ai pra listar soh os 5 com mais registros sem listar todos registros de cada login

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá novamente, Rafael.

Agora é só adicionar um DISTINCT se não me engano. E eu não entendi as alterações que você na query, portanto, vou usar a minha query mesmo e você modifica ela se desejar:

 

$SQL = mysql_query("SELECT DISTINCT * FROM `top5` ORDER BY `login_top` ASC LIMIT 0,5");
while($data = mysql_fetch_assoc($SQL)){
echo $data["nome_top"].'<br/>';
}

 

Acho que era isso, não?

 

Bom, abraço e boa noite! :joia:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá novamente, Rafael.

Agora é só adicionar um DISTINCT se não me engano. E eu não entendi as alterações que você na query, portanto, vou usar a minha query mesmo e você modifica ela se desejar:

 

$SQL = mysql_query("SELECT DISTINCT * FROM `top5` ORDER BY `login_top` ASC LIMIT 0,5");
while($data = mysql_fetch_assoc($SQL)){
echo $data["nome_top"].'<br/>';
}

 

Acho que era isso, não?

 

Bom, abraço e boa noite! :joia:

 

 

Ainda não é isso =/

Tá dificil! ehehe e eu pensando q seria fácil isso! =/

 

testei com os dois códigos pra listar o TOP 5, inclusive agora mexi no ultimo codigo q fiz e nada...

q dor de cabeça =/

to usando esse codigo:

 

<?php
$SQL = mysql_query("select * from top5 where nome_top in(select nome_top from top5 group by nome_top having count(*) > 1) order by nome_top");
while($data = mysql_fetch_assoc($SQL))
 {
  echo $data["nome_top"].'<br/>';
 }
?>

 

 

e ta fazendo o seguinte: ele pega o primeiro rtegistro, no caso joao.. e lista todos joao q existem na tabela... dae vai pro outro nome na sequencia, tipo antonio,, e lista todos antonios embaixo do joao.. e etc...

 

e no codigo q você me passou:

 

<?php
$SQL = mysql_query("SELECT DISTINCT * FROM `top5` ORDER BY `nome_top` ASC LIMIT 0,10");
while($data = mysql_fetch_assoc($SQL))
{
 echo $data["nome_top"].'<br/>';
}
?>

 

tbm nao ta dando... cara q complicacao.. ta f***.. a cabeça ta pesada até eheh.. eu vou dormir e deixar o topico ai, amanha cedo espero ter alguma solução ehehe

vlw por tudo Kami e se conseguir resolver esse lance posta ai hein! eheh boa noite! abraços

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.