Топ по гледане на клипове днес

niksdevil

Registered
Ето базата данни :
Код:
CREATE TABLE `video` (
  `videoid` bigint(20) NOT NULL auto_increment,
  `videokey` mediumtext NOT NULL,
  `username` text NOT NULL,
  `title` mediumtext NOT NULL,
  `flv` mediumtext NOT NULL,
  `description` mediumtext NOT NULL,
  `tags` mediumtext NOT NULL,
  `category01` bigint(20) NOT NULL default '0',
  `category02` bigint(20) default NULL,
  `category03` bigint(20) default NULL,
  `broadcast` varchar(10) NOT NULL default '',
  `location` mediumtext,
  `datecreated` date default NULL,
  `country` mediumtext,
  `allow_embedding` char(3) NOT NULL default '',
  `rating` int(15) NOT NULL default '0',
  `rated_by` varchar(20) NOT NULL default '0',
  `voter_ids` mediumtext NOT NULL,
  `allow_comments` char(3) NOT NULL default '',
  `comment_voting` char(3) NOT NULL default '',
  `comments_count` int(15) NOT NULL default '0',
  `featured` char(3) NOT NULL default 'no',
  `featured_description` mediumtext NOT NULL,
  `allow_rating` char(3) NOT NULL default '',
  `active` char(3) NOT NULL default '0',
  `favourite_count` varchar(15) NOT NULL default '0',
  `playlist_count` varchar(15) NOT NULL default '0',
  `views` bigint(22) NOT NULL default '0',
  `last_viewed` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
  `date_added` timestamp NOT NULL default '0000-00-00 00:00:00',
  `flagged` varchar(3) NOT NULL default 'no',
  `duration` varchar(20) NOT NULL,
  `status` varchar(15) NOT NULL default 'Processing',
  `embed_code` text,
  `embeded` enum('yes','no') NOT NULL default 'no',
  `flv_file_url` text,
  PRIMARY KEY  (`videoid`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=24

Та въпроса ми е как мога да изкарам примерно най-гледаните 20 клипа за деня ?
 
Общо като брой?

На първо време ми идва това в главата.
Правиш една колона today_views, в която ъпдейтваш един int при всяко гледане през днешния ден и при извеждането просто подреждаш резултатите по today_views.

Мисля, че по-лесен вариант не мога да се сетя :)
 
Всеки път когато записваш резултат гледаш дали last_viewed е същия ден като timestamp()-а в момента. Ако е същия ден ъпдейтваш. Ако е от предния ден (т.е. това е първото гледане за новия ден) записваш 1.
 
Тва с cron jobs се прави. Но идеята да проверяваш дали е първото гледане за днес и ако е да зануляваш е добра. Аз поне така бих го направил.
 
Правиш си една таблица с примерни колони :arrow:
------------------------------------
id | vid | date | view
1 | 23 | 13232325 | 14
2 | 51 | 23453543 | 43
3 | 1 | 34322424 | 41
------------------------------------

vid - е id-то на клипа
date - е дата на запис/update
view - е разглежданията

:arrow:

Изваждаш резултата с примерна заявка;
[sql]SELECT
vid, date, view FROM `today_view`
ORDER BY view;[/sql]

А в страницата, където се разглежда даден клип си правиш проверка дали този клип вече е в таблица today_view т.е. неговото специално id :arrow: vid

След т'ва , ако то не съществува да се записва в таблицата, в противен случай ако съществува просто му правиш ъпдейт на полето `view` и `date`. :?:

Ако има нещо не ясно или всичко е не ясно ще драсна примери .
 
Ми най-общо нещо такова си го представях аз.

Код:
$dnes = date("j", time()); 
$poslednoGledane = date("j", $last_viewed);

if($dnes == $poslednoGledane) {
             // ъпдейтваме с полето views_today с +1
} else {
            // зануляваме полето views_today, т.е. пишем 1ца
}
 
Да речем т'ва ти е today.php - сложил съм лимит на показванията - 30, а sql е по-долу в примера...

PHP:
<?php
/* 
===========================
	   INSERT TABLE
===========================
CREATE TABLE `today_view` (
  `id` bigint(20) NOT NULL auto_increment,
  `vid` int(200) NOT NULL,
  `date` varchar(100) NOT NULL,
  `view` int(200) NOT NULL default '0',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM;

*/
$time = time();
$query = mysql_query("SELECT * FROM `today_view` AS today, `video` AS video WHERE today.vid=video.videoid AND today.date='$time' ORDER BY today.view DESC LIMIT 0,30;") or die(mysql_error());
echo "<table>";
while ($row = mysql_fetch_object($query)) {
	$title  = $row->title;
	$view   = $row->view;
	echo "
	<tr>
		<td>$title</td>
		<td>$view</td>
	</tr>";
}
echo "</table>";
?>

а при преглеждането на видеото -

PHP:
$query = mysql_query("SELECT * FROM `today_view` WHERE vid='$videoid';") or die(mysql_error());
if(mysql_num_rows > 0) {
	//update query
} else {
	//insert query
}

Не съм го тествал и не съм сигурен дали т'ва ще е най-добрия вариант - трябва да се обмисли по-добре, ако искаш по-добър резултат.

Колегата @idevbg, по-горе ти е казал още една идея пробвай, експериментирай, мисли и ще се справиш.
 

Back
Горе