Jump to content


Photo

Posição Que Uma Linha Ocupa


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

#1 legalpacas

legalpacas

    Turista

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

Posted 24/01/2009, 12:52

Iai pessoal..

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 Crab

Crab

    Da paz, mas preparado para Guerra

  • Ex-Admins
  • 2521 posts
  • Sexo:Masculino
  • Localidade:Florianópolis - SC
  • Interesses:Desenvolvimento Gráfico e Web.

Posted 24/01/2009, 13:36

Julgando que visitas é um campo no banco de dados, já tentou listar ordenando por esse campo de forma decrescente??

... OEDER BY visitas DESC

:huh: Até mais

#3 Dudu

Dudu

    Viva la vida

  • Usuários
  • 1437 posts
  • Sexo:Masculino
  • Localidade:Uberlândia - MG
  • Interesses:PHP

Posted 24/01/2009, 15:49

Complementando o que o Crab disse, ordene por visitas em forma decrescente.

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 legalpacas

legalpacas

    Turista

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

Posted 24/01/2009, 15:49

Olá Crab, até ai tudo bem, mas o problema é que quero dizer o lugar que se encontra a " uva " em relaçao a todos os outros valores

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 :wacko:

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 Crab

Crab

    Da paz, mas preparado para Guerra

  • Ex-Admins
  • 2521 posts
  • Sexo:Masculino
  • Localidade:Florianópolis - SC
  • Interesses:Desenvolvimento Gráfico e Web.

Posted 24/01/2009, 22:25

Tá... mas me diz uma coisa... se vc da um ORDER BY visitas DESC...

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í

:huh:



--------------------
EDITADO

Não vi que vc tinha editado teu post...

Boa sorte Até mais

#6 legalpacas

legalpacas

    Turista

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

Posted 26/01/2009, 14:59

vixi.. nao deu certo bem da forma q eu quero nao pessoal..

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 '' sem.Ponto

'' sem.Ponto

    Super Veterano

  • Ex-Admins
  • 2098 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte

Posted 26/01/2009, 18:36

Complicado... :ponder:

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()! :D

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! :D
att,
Muller Dias
ex-administrador Fórum WMO

#8 legalpacas

legalpacas

    Turista

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

Posted 26/01/2009, 20:01

'' sem.Ponto que código lindo e perfeito, funcionou maravilhosamente bem.

Só adicionei esse parâmetro: ORDER BY visitas DESC

Muito obrigado mesmo!

Agora me vem uma dúvida, porque você disse isso?

Tem muitos registros na tabela? Se não tiver, você pode fazer o seguinte:

Pode ser que tenha sim com o tempo, porque vai ser um ranking de usuários..
Então quanto mais usuários cadastrados em meu sistema, mais registros.

O que isso poderia comprometer? :ponder:

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

#9 '' sem.Ponto

'' sem.Ponto

    Super Veterano

  • Ex-Admins
  • 2098 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte

Posted 26/01/2009, 22:58

Agora me vem uma dúvida, porque você disse isso?

Acontece que o loop vai pegar todos os registros. Imagina um loop com 10 mil registros, vai demorar demais...

O código que eu fiz eu só recomendo se tiver poucos registros. Para muitos registros está difícil de achar uma solução... :ponder:

Se eu pensar em algo, eu posto aqui. ;)
att,
Muller Dias
ex-administrador Fórum WMO

#10 legalpacas

legalpacas

    Turista

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

Posted 27/01/2009, 01:23

'' sem.Ponto, estou pensando em fazer o seguinte, um campo ranking em cada 'fruta'.

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? :ponder:

#11 '' sem.Ponto

'' sem.Ponto

    Super Veterano

  • Ex-Admins
  • 2098 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte

Posted 27/01/2009, 12:05

legalpacas,

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 :lol:

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? :P

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! :D

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! (ok2)
att,
Muller Dias
ex-administrador Fórum WMO

#12 legalpacas

legalpacas

    Turista

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

Posted 27/01/2009, 13:01

Rapaz, lhe confesso que é uma solução um tanto que criativa.

Continue sonhando assim e ajudando o pessoal :assobio:

Valeu mesmo.

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

:aplauder:

#13 '' sem.Ponto

'' sem.Ponto

    Super Veterano

  • Ex-Admins
  • 2098 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte

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.
att,
Muller Dias
ex-administrador Fórum WMO

#14 legalpacas

legalpacas

    Turista

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

Posted 27/01/2009, 14:18

Verdade, não precisa :lol:




1 user(s) are reading this topic

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

IPB Skin By Virteq