Jump to content


Photo

Vídeos Mais Vistos Da Semana


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

#1 tempest

tempest

    12 Horas

  • Usuários
  • 131 posts
  • Sexo:Masculino
  • Localidade:Caçador, SC
  • Interesses:Php, Mysql e interatividade!

Posted 03/01/2009, 22:38

olá, pessoal. :rolleyes:

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


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?

:click:
Posted Image
Css - Flash - Php?...
<? echo "Compartilhar é uma boa forma de aprender"; ?>

#2 KILLME

KILLME

    Normal

  • Usuários
  • 117 posts
  • Sexo:Não informado
  • Localidade:Caraguatatuba-SP

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

#3 tempest

tempest

    12 Horas

  • Usuários
  • 131 posts
  • Sexo:Masculino
  • Localidade:Caçador, SC
  • Interesses:Php, Mysql e interatividade!

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? :wacko:
Posted Image
Css - Flash - Php?...
<? echo "Compartilhar é uma boa forma de aprender"; ?>

#4 KILLME

KILLME

    Normal

  • Usuários
  • 117 posts
  • Sexo:Não informado
  • Localidade:Caraguatatuba-SP

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:

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

#5 tempest

tempest

    12 Horas

  • Usuários
  • 131 posts
  • Sexo:Masculino
  • Localidade:Caçador, SC
  • Interesses:Php, Mysql e interatividade!

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, :unsure:

e zerar esse campo, digamos com 5,10 mil registros, o script rodaria normal, sem 'travar'? :huh:

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.

Posted Image
Css - Flash - Php?...
<? echo "Compartilhar é uma boa forma de aprender"; ?>

#6 KILLME

KILLME

    Normal

  • Usuários
  • 117 posts
  • Sexo:Não informado
  • Localidade:Caraguatatuba-SP

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.
http://www.liveworks.com.br : Soluções para internet
http://www.phpmysqljquery.com.br : PHP, MySQL e jQuery
http://www.passoapasso.info : Minhas dicas

#7 boirock

boirock

    Tecnologia para todos (agora hexa campeão)

  • Usuários
  • 1559 posts
  • Sexo:Masculino
  • Localidade:Curitiba - PR
  • Interesses:PostgreSQL - PHP

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:

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

Ou seja, você não vai conseguir acessar o valor antigo da coluna para poder usar a expressão nomedacoluna + 1...
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 (y) :)

#8 tempest

tempest

    12 Horas

  • Usuários
  • 131 posts
  • Sexo:Masculino
  • Localidade:Caçador, SC
  • Interesses:Php, Mysql e interatividade!

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

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

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. :ph34r:
Posted Image
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)

IPB Skin By Virteq