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!
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.
Valeu pela ajuda pessoal!!! Deu certo!!!
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
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???
É, 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?