
Posição Que Uma Linha Ocupa
#1
Posted 24/01/2009, 12:52
seguinte, como eu faria para mostrar que posição ocupa uma determinada linha do banco de dados, ordenando elas por uma coluna, digamos visitas?
exemplo
banana - 15
maça - 20
pera - 22
uva - 4
morango - 17
abacaxi - 12
as frutas corresponde cada linha, conseqüentemente os números as visitas...
quero que diga assim: " a fruta uva está em 6 lugar ", a posição deve ser ordenada pelo número de visitas.
desde já, valeu ai
#2
Posted 24/01/2009, 13:36
... OEDER BY visitas DESC

canaldev.com.br
sistemabasico.com.br
twitter.com/sistemabasico
twitter.com/lunelli
#3
Posted 24/01/2009, 15:49
Antes de começar o loop, crie uma variável chamada $i, com valor = 1.
Exemplo:
$i = 1;while($variavel = mysql_fetch_array($consulta)) { echo $i . " " . $variavel['fruta']; $i++;}
Assim, a cada rodada, ele adiciona +1 na variável, e ordenando pelas visitas. Assim você teria um "ranking".
Até mais

Edição feita por: Dudu, 24/01/2009, 15:49.
Fórum WMO - Equipe de Desenvolvimento / Banco de Dados - Moderador
Twitter: HostCheap
#4
Posted 24/01/2009, 15:49
como dei no exemplo acima tem 6 linhas, ordernar pelo número de visitas é só setar ORDER, mas quero que informe a posiçao que se encontra em relacao a todas as outras linhas...
nao sei se ficou mais claro agora

tipo, echo = "o abacaxi está em 5 lugar";
tipo, echo = "a banana está em 4 lugar";
sacou?
--------------
Acho que é isso Dudu, postei antes de vc responder e nao vi seu post, vou tentar aki...
Edição feita por: legalpacas, 24/01/2009, 15:51.
#5
Posted 24/01/2009, 22:25
A lógica disso é colocar no topo o que tem maior número de visitas decrescentemente.... certo?
primeiro 34 visitas
segundo 22 visitas
...
e assim decrescentemente em diante...
Então que parte do que eu falei que vc não entendeu??
Para mostrar do lado o número da linha é só fazer como o dudu falou utilize o valor de $i
não entendi o que vc não entendeu... diz aí

--------------------
EDITADO
Não vi que vc tinha editado teu post...
Boa sorte Até mais
canaldev.com.br
sistemabasico.com.br
twitter.com/sistemabasico
twitter.com/lunelli
#6
Posted 26/01/2009, 14:59
dessa forma ai ele mostra todas as colunas
eu quero que ele informa somente que lugar que encontra UMA determinada coluna, se encontra em relaçao as outras, e nao que mostre todas as colunas
digamos, que tenho 100 colunas... entao quero que informe qual posiçao a uva está em relaçao as outras frutas...
-> a uva se encontra em 53 lugar... (eu setaria o id da uva, para que pegue a referencia para ela aparecer)
e como eu faria?
já tentei de farias formas, mais todas sem sucesso..
e como o dudu disse, é sim um ranking, mais um ranking 'individual' que mostre somente uma coluna.
#7
Posted 26/01/2009, 18:36

Tem muitos registros na tabela? Se não tiver, você pode fazer o seguinte:
$sql = mysql_query("SELECT * FROM tabela"); while($linha = mysql_fetch_assoc($sql)) { $fruta[ ] = $linha['fruta']; }
A minha query não tem nenhuma condição, então eu estou pegando todos os registros da tabela. E com o while eu estou criando um array com todas as frutas.
Note que eu deixei os colchetes vazios, com isso o loop vai criar chaves automaticamente e o valor de cada um será o nome da fruta. A primeira fruta recebe a chave 0, a segunda recebe a chave 1, a terceira recebe a chave 2, e assim por diante.
Se você der um print_r($fruta), o resultado será:
Array ( [0] => Pera [1] => Maça [2] => Morango [3] => Banana [4] => Abacaxi [5] => Uva )
Agora todas as linhas da tabela receberam uma chave, assim você pode saber em qual posição a linha se encontra. Mas como?
Use array_search()!

Essa função faz uma busca no array e retorna a chave. Vamos lá!
$valor = "Morango"; $posicao = array_search($valor, $fruta) + 1; echo '"'. $valor .'" está em '. $posicao .'º lugar.';
Na variável $valor, coloque o nome da fruta que você quer buscar. Eu coloquei "Morango", então array_search($valor, $fruta) vai buscar por "Morango" e vai retornar a chave 2. Como o array começa com a chave 0, eu somei + 1 com a chave retornada pela função array_search() para descobrir a posição.
Pronto!

Muller Dias
ex-administrador Fórum WMO
#8
Posted 26/01/2009, 20:01
Só adicionei esse parâmetro: ORDER BY visitas DESC
Muito obrigado mesmo!
Agora me vem uma dúvida, porque você disse isso?
Pode ser que tenha sim com o tempo, porque vai ser um ranking de usuários..Tem muitos registros na tabela? Se não tiver, você pode fazer o seguinte:
Então quanto mais usuários cadastrados em meu sistema, mais registros.
O que isso poderia comprometer?

Apesar, da infinidade de processos que irá gerar.. tem como dar uma otimizadinha?

#9
Posted 26/01/2009, 22:58
Acontece que o loop vai pegar todos os registros. Imagina um loop com 10 mil registros, vai demorar demais...Agora me vem uma dúvida, porque você disse isso?
O código que eu fiz eu só recomendo se tiver poucos registros. Para muitos registros está difícil de achar uma solução...

Se eu pensar em algo, eu posto aqui.

Muller Dias
ex-administrador Fórum WMO
#10
Posted 27/01/2009, 01:23
No final do dia, um script interno iria gerar a posição de cada fruta e adicionar automaticamente no campo ranking.
Isso iria evitar que todos os visitantes ficassem gerando essa infinidade de array's, e quem se encarregaria disto seria um script interno, gerado uma vez ao dia.
O que você acha?

#11
Posted 27/01/2009, 12:05
Você nem vai acreditar... sonhei hoje a noite que estava tentando achar uma solução para o seu problema. E eu consegui resolver o problema no meu sonho. kkkkkkkkk

Peguei o resultado direto pelo mysql mesmo. Pensa comigo...
Eu tenho esses registros ordenados:
pera ------- 22 maça ------- 20 morango ---- 17 banana ----- 15 abacaxi ---- 12 uva -------- 4
Eu quero saber a posição da banana. A banana tem 15 visitas, correto? As frutas anteriores (pera, maça, morango) tem o número de visitas MAIOR QUE o número de visitas da banana.
Ainda não entendeu o meu esquema?

A gente pode usar operadores na query, então eu posso pegar o número de visitas da banana e usar o operador >= para a consulta me retornar apenas as linhas que tem o número de visitas maior que o número de visitas da banana + a linha que tem a banana.
Pronto!

Agora que a consulta vai me retornar apenas as linhas que eu preciso, é só usar mysql_num_rows() para contar essas linhas, o número retornado será a posição da linha.
Exemplo:
$sql = mysql_query("SELECT * FROM tabela WHERE visitas >= '15'"); $contagem = mysql_num_rows($sql); echo 'Posição: '. $contagem .'º lugar.';
Coloquei o número 15 na query, esse número é o número de visitas da banana. Eu coloquei manualmente, mas esse número tem que entrar automaticamente na query, provavelmente você tem uma outra consulta aí que pega o registro da fruta, aí é só jogar o número de visitas da fruta selecionada numa variável e colocar ela na minha query.
visitas >= '$visitas_da_fruta'
Boa sorte!

Muller Dias
ex-administrador Fórum WMO
#12
Posted 27/01/2009, 13:01
Continue sonhando assim e ajudando o pessoal

Valeu mesmo.
$sql = mysql_query("SELECT pontos FROM usuarios WHERE pontos >= '$points' ORDER BY pontos DESC"); $contagem = mysql_num_rows($sql);

#13
Posted 27/01/2009, 13:42
Rapaz, lhe confesso que é uma solução um tanto que criativa.

Só uma coisinha... não precisa do ORDER BY, a condição pontos >= '$points' pega só as linhas que você precisa, e como você só precisa da contagem das linhas, a ordem delas não altera o resultado.
Muller Dias
ex-administrador Fórum WMO
#14
Posted 27/01/2009, 14:18

1 user(s) are reading this topic
0 membro(s), 1 visitante(s) e 0 membros anônimo(s)