Vídeos Mais Vistos Da Semana
Started By tempest, 03/01/2009, 22:38
7 replies to this topic
#1
Posted 03/01/2009, 22:38
olá, pessoal.
tenho um site de videos e, quero fazer a parte de 'mais vistos da semana'.
pra isso eu iria criar uma tabela chamada "vistas_semana"
pois bem, na tabela principial, onde estao os dados dos videos, titulo, etc, tem mais de 2 mil videos(registros).
para mostrar os videos mais vistos da semana, eu vou armazenar na tabela "vistas_semana"
o id do video e tb o numero de visitas que teve durante a semana tipo:
id | id_video | vistas_semana
até ai blz, pois pretendo pegar os ids dos videos futuramente e consulta-los na tabela principal para mostralos.
a minha duvida é, como eu faço para inserir esses dados na tabela "vistas_semana"?
ou seja, quando o script rodar, ele vai inserir o id do video e somar + 1 visita. mas se o video já estiver cadastrado só vai atualizar para + 1 visita.
teria que usar REPLACE?
REPLACE INTO vistas_semana (id,id_video,vistas_semana) VALUES ('', ‘10’,vistas_semana+1);
nao sei como o replace funciona, mas nesse caso, se id_video "10" já existir entao ele atualiza, e se nao existir ele cria?
tenho um site de videos e, quero fazer a parte de 'mais vistos da semana'.
pra isso eu iria criar uma tabela chamada "vistas_semana"
pois bem, na tabela principial, onde estao os dados dos videos, titulo, etc, tem mais de 2 mil videos(registros).
para mostrar os videos mais vistos da semana, eu vou armazenar na tabela "vistas_semana"
o id do video e tb o numero de visitas que teve durante a semana tipo:
id | id_video | vistas_semana
até ai blz, pois pretendo pegar os ids dos videos futuramente e consulta-los na tabela principal para mostralos.
a minha duvida é, como eu faço para inserir esses dados na tabela "vistas_semana"?
ou seja, quando o script rodar, ele vai inserir o id do video e somar + 1 visita. mas se o video já estiver cadastrado só vai atualizar para + 1 visita.
teria que usar REPLACE?
REPLACE INTO vistas_semana (id,id_video,vistas_semana) VALUES ('', ‘10’,vistas_semana+1);
nao sei como o replace funciona, mas nesse caso, se id_video "10" já existir entao ele atualiza, e se nao existir ele cria?
Css - Flash - Php?...
<? echo "Compartilhar é uma boa forma de aprender"; ?>
#2
Posted 03/01/2009, 22:55
Eu geralmente utilizo estes dados na mesma tabela que uso os dados e faço um UPDATE:
<?php mysql_query("UPDATE $tb_video SET video_visualizacoes = video_visualizacoes+1 WHERE video_id = '$id'"); ?>
http://www.liveworks.com.br : Soluções para internet
http://www.phpmysqljquery.com.br : PHP, MySQL e jQuery
http://www.passoapasso.info : Minhas dicas
http://www.phpmysqljquery.com.br : PHP, MySQL e jQuery
http://www.passoapasso.info : Minhas dicas
#3
Posted 03/01/2009, 23:14
KILLME
Sim, mas voce se refere a todas as visualizações do video, des de o cadastro certo?
o que eu quero é só os da semana, pois na tabela pirincipal já existe um campo chamado "total_visitas".
eu até colocaria as visitas da semana na tabela principal, mas como preciso zerar esse campo toda semana, acho que seria mais viavel uma tabela especialmente pra isso. oq vc acha?
Sim, mas voce se refere a todas as visualizações do video, des de o cadastro certo?
o que eu quero é só os da semana, pois na tabela pirincipal já existe um campo chamado "total_visitas".
eu até colocaria as visitas da semana na tabela principal, mas como preciso zerar esse campo toda semana, acho que seria mais viavel uma tabela especialmente pra isso. oq vc acha?
Css - Flash - Php?...
<? echo "Compartilhar é uma boa forma de aprender"; ?>
#4
Posted 03/01/2009, 23:38
Mas o que impediria de zerar o campo video_semanais num tabela principal? hehe toda semana só dar um update na tabela videos, no campo visualizações semanais para 0 sem indicar uma condição:
Eu acho que além de economizar uma tabela, economiza em códigos.
É a minha opinião, e sou iniciante em PHP hehe
mysql_query("UPDATE $tb_video SET video_visualizacoes_semanais = 0")or die(mysql_error());
Eu acho que além de economizar uma tabela, economiza em códigos.
É a minha opinião, e sou iniciante em PHP hehe
http://www.liveworks.com.br : Soluções para internet
http://www.phpmysqljquery.com.br : PHP, MySQL e jQuery
http://www.passoapasso.info : Minhas dicas
http://www.phpmysqljquery.com.br : PHP, MySQL e jQuery
http://www.passoapasso.info : Minhas dicas
#5
Posted 04/01/2009, 00:08
Entao, eu tb pensei assim, mas achei que seria mais pratico utilizar outra tabela, pois quando o site tiver mtos videos a consulta ficara mais lenta, (creio eu).
na tabela principal existem 10 campos,
e zerar esse campo, digamos com 5,10 mil registros, o script rodaria normal, sem 'travar'?
OBS: alguem tem alguma ideia de como o youtube grava esses dados? mais vistos do (dia,semana,mes etc)
na tabela principal existem 10 campos,
e zerar esse campo, digamos com 5,10 mil registros, o script rodaria normal, sem 'travar'?
OBS: alguem tem alguma ideia de como o youtube grava esses dados? mais vistos do (dia,semana,mes etc)
Edição feita por: tempest, 04/01/2009, 00:13.
Css - Flash - Php?...
<? echo "Compartilhar é uma boa forma de aprender"; ?>
#6
Posted 04/01/2009, 00:21
Realmente, não tinha pensado nisto, testei com uma tabela aqui que tem 1 milhão e 500 mil registros e demorou cerca de 2 minutos, mesmo com o campo visualizações sendo index..
Bom se for em uma nova tabela, eu usaria o UPDATE, já que nunca utilizei o replace.
Bom se for em uma nova tabela, eu usaria o UPDATE, já que nunca utilizei o replace.
http://www.liveworks.com.br : Soluções para internet
http://www.phpmysqljquery.com.br : PHP, MySQL e jQuery
http://www.passoapasso.info : Minhas dicas
http://www.phpmysqljquery.com.br : PHP, MySQL e jQuery
http://www.passoapasso.info : Minhas dicas
#7
Posted 04/01/2009, 23:47
Então velhinho... a tua sintaxe de REPLACE não me pareceu errada.
O problema é que REPLACE não se comporta da maneira que você espera e não deve servir...
Segundo descrito no próprio manual do MySQL, o REPLACE age da seguinte maneira:
Se fizer isso ele vai pegar o valor default dessa coluna e acescentar 1
Daí se for fazer SELECT já perde a razão de ser REPLACE... é melhor fazer um tratamento no PHP.
A minha sugestão é criar uma STORED PROCEDURE que substitua o SELECT que vocÊ aplica na exibição dos dados...
Essa procedure deveria fazer todo esse trabalho de acrescentar na tabela de visualização semanal e, finalmente, retornar os dados que o seu SELECT já retorna.
Outra sugestão seria criar uma tabela de visualizações e simplesmente ir adicionando nela com INSERT...
Daí vocÊ faz a totalização usando GROUP BY pela data de visualização...
Se o problema for medo do tamanho dessa tabela, pode-se criar uma tabela totalizadora, preenchida por um script executado periodicamente e automaticamente (cronjobs ou agendador de tarefas do windows) que limpe os registros antigos e jogue o seu total nessa tabela totalizadora.
Bem... espero ter ajudado
O problema é que REPLACE não se comporta da maneira que você espera e não deve servir...
Segundo descrito no próprio manual do MySQL, o REPLACE age da seguinte maneira:
Ou seja, você não vai conseguir acessar o valor antigo da coluna para poder usar a expressão nomedacoluna + 1...1 - Tenta inserir o registro
2 - Caso ocorra um erro de duplicidade..
2.1 - Deleta a linha antiga
2.2 - Insere a mesma linha com os valores novos
Se fizer isso ele vai pegar o valor default dessa coluna e acescentar 1
Daí se for fazer SELECT já perde a razão de ser REPLACE... é melhor fazer um tratamento no PHP.
A minha sugestão é criar uma STORED PROCEDURE que substitua o SELECT que vocÊ aplica na exibição dos dados...
Essa procedure deveria fazer todo esse trabalho de acrescentar na tabela de visualização semanal e, finalmente, retornar os dados que o seu SELECT já retorna.
Outra sugestão seria criar uma tabela de visualizações e simplesmente ir adicionando nela com INSERT...
Daí vocÊ faz a totalização usando GROUP BY pela data de visualização...
Se o problema for medo do tamanho dessa tabela, pode-se criar uma tabela totalizadora, preenchida por um script executado periodicamente e automaticamente (cronjobs ou agendador de tarefas do windows) que limpe os registros antigos e jogue o seu total nessa tabela totalizadora.
Bem... espero ter ajudado
#8
Posted 05/01/2009, 11:28
E ai galera blz;
acho que consegui resolver o problema do REPLACE,
eu tentei assim:
criei a tabela só com os campos:
id_video | vistas
o id_video coloquei como primaria, tem alguem problema nao usar o id auto_incremnt?
bom , dai a sintaxe ficou assim:
INSERT INTO vistas_semana (id_video,vistas) VALUES ('$id','1') ON DUPLICATE KEY UPDATE vistas=vistas+1
ou seja, caso o $id que é o id do video já esteja cadastrado, ele só vai acrecestar + 1 ao campo "vistas".
funcionou perfeitamente
valeu boirock, eu até tinha procurado sobre stored procedure, mas achei que seria mto código pra pouca coisa, hehe.
e no caso do cronjob eu ainda nao sei como funciona! mas vlw ai.
ah, só refazendo minha duvida anterior, alguem tem ideia de como o youtube e sites desse tipo, armazenam esses dados?
pois nao sei se estou fazendo da maneira certa.
acho que consegui resolver o problema do REPLACE,
eu tentei assim:
criei a tabela só com os campos:
id_video | vistas
o id_video coloquei como primaria, tem alguem problema nao usar o id auto_incremnt?
bom , dai a sintaxe ficou assim:
INSERT INTO vistas_semana (id_video,vistas) VALUES ('$id','1') ON DUPLICATE KEY UPDATE vistas=vistas+1
ou seja, caso o $id que é o id do video já esteja cadastrado, ele só vai acrecestar + 1 ao campo "vistas".
funcionou perfeitamente
valeu boirock, eu até tinha procurado sobre stored procedure, mas achei que seria mto código pra pouca coisa, hehe.
e no caso do cronjob eu ainda nao sei como funciona! mas vlw ai.
ah, só refazendo minha duvida anterior, alguem tem ideia de como o youtube e sites desse tipo, armazenam esses dados?
pois nao sei se estou fazendo da maneira certa.
Css - Flash - Php?...
<? echo "Compartilhar é uma boa forma de aprender"; ?>
1 user(s) are reading this topic
0 membro(s), 1 visitante(s) e 0 membros anônimo(s)