Query vencedora! Alguém pode me ajudar?

Oi Pessoal,
Estou querendo uma query simples mas como não tenho mt experiência não sei como fazer!

Digamos que eu tenha a seguinte tabela de log, de acordo com as visitas dos usuarios as páginas no site:

Log +-----------+-------------+------------+-----------+ | Login | Data | Estilo | Acao | +-----------+-------------+------------+-----------+ | leo182 | 20060721 | Punk-Rock | ouvir | | pedro44 | 20060722 | Pop-Rock | visitar | | joao_op | 20060722 | Hardcore | visitar | | pedro44 | 20060722 | Pop-Rock | ouvir | | pedro44 | 20060722 | Pop-Rock | comprar | | leo182 | 20060721 | Punk-Rock | ouvir | | pedro44 | 20060801 | DeathMetal | ouvir | | pedro44 | 20060801 | Pop-Rock | ouvir | | pedro44 | 20060801 | Reggae | visitar | +-----------+-------------+------------+-----------+
Notamos que o Estilo favorito do usuário “pedro44” é o “pop-rock”.
O que eu gostaria é de uma query que retonasse essatamente isso!
A partir do Login do usuário quero descobrir o Estilo que ele mais interage no site, e com isso eu possa futuramente recomendar a ele outras músicas do mesmo estilo!
Bem, imagino que deve ser algo usando count(*), mas não tenho ideia!

Alguém saberia me dizer?
:?

A query seria mais ou menos assim

Select count(*) as tot, Estilo From Log where Login = 'pedro44' Group By Estilo Order By tot Desc Limit 1

Isso te retornará apenas uma linha com o estilo favorito do pedro44.
Obs.: Claro que alguns comandos serão diferentes em determinados SGDBS. Mas como no seu caso me parece que você usa mysql, creio que a query acima vai funcionar corretamente.

para que retorne apenas o primeiro mesmo, pode colocar um “LIMIT 1” ao final dessa query mesmo

flw

[edit] poxa, editou não vale, meu post perdeu o sentido hehehehe

Foi mal,
É que quando editei ninguém havia respondido ainda heeheh

Valeu pela ajuda pessoal!!! Deu certo!!!
:smiley:
Bem, agora só preciso de mais uma coisa, mas acho que isso não consigo com um simples SELECT.
Já descobri que o pedro prefere “Pop-Rock” certo?
Agora eu queria recomendar a ele outras bandas que são do mesmo estilo, menos a banda favorita dele que vamos supor que seja “Tihuana”.
Então tomando por base a tabela abaixo, sei que eu poderia fazer uma Query assim:

SELECT * FROM bandas WHERE estilo = ‘Pop-Rock’ AND nomebanda != ‘Tihuana’

bandas +-----------------+--------------+ | nomebanda | estilo | +-----------------+--------------+ | Dead Fish | Hardcore | | CPM 22 | Hardcore | | Raimundos | Hardcore | | Detonautas | Pop-Rock | | Pitty | Pop-Rock | | Tihuana | Pop-Rock | | Charlie Brown | Pop-Rock | | Ultraje a Rigor | Pop-Rock | | O Rappa | Reggae-Rock | | Sepultura | DeathMetal | +-----------------+--------------+
Essa Query retornaria: Detonautas, Pitty, Charlie Brown e Ultraje a Rigor!

Mas dessas que retornaram eu só quero selecionar duas! Sendo de forma randomica… pensei em usar essa função:

Random r = new Random(); int randInt = Math.abs(r.nextInt()) % 5;
E assim gerar um numero que seria o numero da linha que eu pego nessa tabela de resultado…
Mas no futuro terão outras bandas cadastradas e esse sorteio não pode se basear em um numero fixo!
Será que existe um SELECT ou uma maneira mais prática de fazer isso? :? :?:

Para saber o nº de bandas disponíveis, vc pode usar:

SELECT count(*) FROM bandas WHERE estilo = 'Pop-Rock' AND nomebanda != 'Tihuana'

Pegando a contagem no resultset, vc coloca ela no lugar daquele 5 ali. Com os dois números escolhidos, aí é só rodar mais 2 queries, mais ou menos assim:

SELECT * FROM bandas WHERE estilo = 'Pop-Rock' AND nomebanda != 'Tihuana' LIMIT oSeuNumeroAleatorio, 1

Atenção! Não testei pra ver se funciona…

Valeu Eduardo!!!

Eu consegui com essa Query aqui:

SELECT nomebanda FROM bandas WHERE estilo = 'Pop-Rock' AND nomebanda != 'Tihuana' ORDER BY RAND() LIMIT 2

Agora sim está como eu queria!!! :smiley:

Valeu pela força pessoal!!! O GUJ detona mesmo!!! rsrsrs…

.

Beleza.

Bom, sem querer ser chato mas já sendo, usando essa sua tabela ali, viriam sempre os mesmos dois primeiros não viria?

Imagine se ele foi inserido em ordem alfabética e já vem nessa ordem do bd, ordenando ou não por qualquer uma das duas colunas eles não vem na mesma ordem sempre?

ex:

bandas +-----------------+--------------+ | nomebanda | estilo | +-----------------+--------------+ | Charlie Brown | Pop-Rock | | Detonautas | Pop-Rock | | Pitty | Pop-Rock | | Tihuana | Pop-Rock | | Ultraje a Rigor | Pop-Rock | +-----------------+--------------+

Se num select sem ordenar ele vier já assim, ordenando pela coluna 1 ou 2 da na mesma não dá? Ou eu que to viajando???

flw

É, acho que sim… se o BD for alimentado em ordem alfabética tanto faz a coluna que mandar ordenar…
Mas no meu caso nem rola… pq meu BD será alimentado sem levar em consideração a ordem alfabética… e também tenho outros campos na tabela… é que nesse exemplo, coloquei apenas “nomebanda” e “estilo” pra não me enrolar muito na explicação do que eu queria fazer sacou? :wink:

.