[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Функция"Количество просмотров"
datvid
Всем доброго вечера!!! Помогите пожалуйста,я хотел бы на своем сайте разместить функцию
"Количество просмотров".Т.е. у меня онлайн кинотеатр и как можно отобразить сколько раз смотрели этот или иной фильм.Контент сайта находиться в Базе данных MYPhpadmin.
И вообще у кого какое мнение,поделитесь,,,Стоит помещать эту функцию или нет!!!

Заранее всех благодарю за помощь!!!



Спустя 35 минут, 7 секунд (18.04.2011 - 22:06) ИНСИ написал(а):
datvid если у тебя все данные берутся с БД, то создай еще одно поле к фильму, например: views. При каждом открытии страницы с фильмом, просто прибавляй к значению views еще один просмотр smile.gif

Спустя 4 минуты, 56 секунд (18.04.2011 - 22:11) neadekvat написал(а):
Ох, боюсь, как бы на меня не наехли, поэтому я буду предельно вежлив и аккуратен.

Многоуважаемый datvid, видите ли как обстоят дела: предложения не менее уважаемого velbox часто находит применение в реальных проектах, однако достаточно часто звучат советы хранить частообновляемую информацию о сущности в отдельной таблице, дабы база данных могла использовать кэш выборки из первой таблицы.

Говоря иным языком, поле views должно хранится в отдельно созданной таблице с названием, к примеру, films_views, в которой второе поле будет хранить значение идентификатора фильма (обычно называется id) в основной таблице.

Спустя 2 минуты, 27 секунд (18.04.2011 - 22:14) datvid написал(а):
Многоуважаемый експерт velbox и форумчанин neadekvat , я с уважением отношусь к этому форуму и ко всем форумчанинам и темболее к экспертам...Но прости Господи за то,что я теперь хочу сказать в Ваш адрес :

....................................................

Я считаю себя достаточно деликатным и образованным человеком и поэтому заменил это предложение в Ваш адрес многоточием!!!!
В телепередачах эти выражения которые я здесь "произнёс" заменяют коротким высокочастотным сигналом "ПИ".
Желаю Вам здоровья и того ,что указано в выше написаном!!!!

Спустя 3 минуты, 22 секунды (18.04.2011 - 22:17) datvid написал(а):
Спасибо за ответ!!! А дополнительную функцию не надо добавлять на страницы сайта?

Спустя 2 минуты, 41 секунда (18.04.2011 - 22:20) neadekvat написал(а):
datvid, моя ирония была направлена не в ваш адрес, прошу прощения за неочевидность поступка.
Однако суть сказана вполне серьезно.
Вручную связывать не надо.
Итак, создаем таблицу films_views (я буду исходить из того, что в основной таблице идентификатор или первичный ключ имеет имя id)
Соответственно, стрктура films_views будет следующая: film_id, views. Причем film_id - первичный ключ.
А запрос на обновление будет примерно таким:
INSERT INTO films_views (`film_id`, `views`) VALUES ($film_id, 1)
ON DUPLICATE KEY UPDATE `views` = `views` + 1

В остальном, если что-то непонятно или я упустил - могу рассказать, кроме тех вопросов, которые подробно освещены в документации.

Спустя 4 минуты, 3 секунды (18.04.2011 - 22:24) datvid написал(а):
Большое спасибо!!!Я обязательно попробую ,хотя не уверен что у меня сразу получиться но если что еще раз зайду за помощью!!!Еще раз благодарствую!

Спустя 12 минут, 21 секунда (18.04.2011 - 22:36) datvid написал(а):
У меня вывод из таблицы прописан так


 
<?php
$table = "<table border=0 width=560px>\n";

while ($row = mysql_fetch_assoc($result))
{
$table .= "<tr>\n";

$table.= "<tr>".$row['title']."</tr>\n";
$table.= "<tr>".$row['introtext']."</tr>\n";


$table.= "</tr>\n";
}



$table.= "</table>\n";

echo $table;

?>


Вами написанную функцию надо прописывать внутри выбоки или отдельно примерно так?

<?php
INSERT INTO films_views (`film_id`, `views`) VALUES ($film_id, 1)
ON DUPLICATE KEY UPDATE `views` = `views` + 1

?>

Спустя 3 минуты, 47 секунд (18.04.2011 - 22:40) neadekvat написал(а):
Нет, это лишь запрос. Вы не знаете, как выполняется запрос?

Спустя 1 минута, 35 секунд (18.04.2011 - 22:42) Snus написал(а):
datvid
$query = '
INSERT INTO films_views (`film_id`, `views`) VALUES ('
.(int)$film_id.', 1)
ON DUPLICATE KEY UPDATE `views` = `views` + 1'
;
mysql_query($query) or die(mysql_error());

Спустя 3 минуты, 56 секунд (18.04.2011 - 22:46) datvid написал(а):
Вы имеете в виду файл связи с базой данных где прописываеться у меня запрос :


$sql = "SELECT * FROM `content` order by `id` desc LIMIT 0, 10";

$result = mysql_query($sql) or die(mysql_error() ."<br/>". $sql);

Спустя 3 минуты, 9 секунд (18.04.2011 - 22:49) datvid написал(а):
Я Вас понял кажеться!!! Для данного случая надо создать дополнительный connect.php и там прописать Вами подсказанный запрос?

Спустя 22 минуты, 53 секунды (18.04.2011 - 23:12) kirik написал(а):
Цитата (neadekvat @ 18.04.2011 - 15:11)
однако достаточно часто звучат советы хранить частообновляемую информацию о сущности в отдельной таблице, дабы база данных могла использовать кэш выборки из первой таблицы.

Я не уверен, но разве update строки влияет на весь кэш, который относится к этой таблице?

Спустя 8 часов, 7 минут, 21 секунда (19.04.2011 - 07:19) neadekvat написал(а):
Цитата
При изменениях таблицы (INSERT, UPDATE, DELETE, TRUNCATE, ALTER или DROP TABLE|DATABASE), все кэшированные запросы, использовавшие данную таблицу (возможно, через таблицу MRG_MyISAM!), становятся недействительными и удаляются из кэша.

Если изменения были произведены в поддерживающих транзакции таблицах вида InnoDB, то все кэшированные запросы становятся недействительными при выполнении команды COMMIT.

Как я понимаю, при изменении даже одной строки, mysql почистит кэш всей таблицы. Или я, что называется, смотрю в книгу - вижу ..? smile.gif

Спустя 46 минут, 38 секунд (19.04.2011 - 08:06) kirik написал(а):
neadekvat
Это справедливо для mysql 4.x (кто-то ещё пользуется?).
В мане по 5.1 пишут:
Цитата (http://dev.mysql.com/doc/refman/5.1/en/query-cache.html)
The query cache does not return stale data. When tables are modified, any relevant entries in the query cache are flushed.

На сколько я понимаю, "сбросится" только то что изменялось.. тоесть не весь табличный кэш.
Хотя в подтверждение твоим словам ниже пишут:
Цитата
A query mix consisting almost entirely of a fixed set of SELECT statements is much more likely to benefit from enabling the cache than a mix in which frequent INSERT statements cause continual invalidation of results in the cache.

Казённым языком пишут, блин)

Спустя 4 минуты, 45 секунд (19.04.2011 - 08:10) Семён написал(а):
neadekvat прав
с memcache разницы не будет.

Спустя 14 минут, 39 секунд (19.04.2011 - 08:25) kirik написал(а):
Семён
мемкэш вообще полезная штука smile.gif

Я тут перешёл недавно на postgresql. И решил посмотреть как там дела с кэшем обстоят. Наткнулся на интереснейшую весчь: pqc - прослойка мемкэша между БД и приложением. Тоесть получаем "внешний" кэш БД который легко масштабируется, и при этом не нужно в самом приложении делать лишние действия (конечно минусы есть - инвалидация кэша не очень удобна, но обещают дописать). Ещё не тестил, но звучит интересно.

Спустя 5 часов, 2 минуты, 31 секунда (19.04.2011 - 13:28) neadekvat написал(а):
kirik, потом для интереса напиши - как оно там.

Спустя 4 минуты, 28 секунд (19.04.2011 - 13:32) Семён написал(а):
Хех. внешний кеш у SQL smile.gif

Спустя 5 часов, 54 минуты, 29 секунд (19.04.2011 - 19:26) datvid написал(а):
Друзья,это опять я ...! Я наверное повторяюсь,но хочу сказать что у меня сайт онлайн фильмов! И теперь возникла проблема с созданием количества просмотров того или иного фильма!!!Есть база данных где главная таблица "content"В ней помещенны все фильмы.
Присуствует строка "id" с параметром "первичный".Есть также строка views,которая как я понял здесь лишняя. Мне здесь помогли и подсказали что надо создать отдельную таблицу
content_views,что я и сделал и в этой таблице только две строки "id" и "views".Причем id c параметром "первичный."Бал подсказан такой запрос что я думаю конечно он правильный:

$query = '
INSERT INTO films_views (`film_id`, `views`) VALUES ('
.(int)$film_id.', 1)
ON DUPLICATE KEY UPDATE `views` = `views` + 1'
;
mysql_query($query) or die(mysql_error());



Спустя 9 минут, 6 секунд (19.04.2011 - 19:36) datvid написал(а):
Но я не могу понять как и где этот запрос прописать.
У меня выборка на страницах прописана так:

<?php

$table = "<table border=0 width=560px >\n";

while ($row = mysql_fetch_assoc($result))
{
$table .= "<tr>\n";

$table .= "<tr>".$row['title']."</tr>\n";
$table .= "<tr>".$row['introtext']."</tr>\n";
$table .= "<tr>".$row['views']."</tr>\n";


$table .= "</tr>\n";
}



$table .= "</table>\n";

echo $table;
?>


Страница связанна с базой данных файлом php connect,в этом файле запрос прописан таким образом:


$sql = "SELECT * FROM `content` order by `id` desc LIMIT 0, 10";


$result = mysql_query($sql) or die(mysql_error() ."<br/>". $sql);



Подскажите куда мне привязать подсказанный скрипт для отображения количества просмотров фильмов

Спустя 14 часов, 28 минут, 42 секунды (20.04.2011 - 10:04) datvid написал(а):
Я так понял что для прописания запроса:

$query = '
INSERT INTO films_views (`film_id`, `views`) VALUES ('
.(int)$film_id.', 1)
ON DUPLICATE KEY UPDATE `views` = `views` + 1'
;
mysql_query($query) or die(mysql_error());


надо создать новый файл.php db_connect__views и в нем прописать выше указанный код для связи с таблицей connect_views .
Но я не понимаю как сделать выборку т.е вывод результатов views на страницы сайта.
Страницу сайта не возможно же соединить одновременно с двумя таблицами???

Спустя 1 час, 57 минут, 9 секунд (20.04.2011 - 12:01) m4a1fox написал(а):
datvid
мое мнение... уважаемый datvid не забудь так же про возможности и добавление +1 к просмотру определенного фильма при нажатии F5. То есть поместите код +1 в БД в $_SESSION.

Спустя 9 минут, 33 секунды (20.04.2011 - 12:11) Renden написал(а):
datvid
Как я понял выше приведенный код выводит циклом все фильмы Вам на главную, в таком случае как вы собираетесь ловить "уникальный просмотр"? Вам надо создать отдельную страницу для каждого фильма например index.php?id=1; index.php?id=N в которой делать 2 запроса, 1 непосредственно на вывод конктретного фильма SELECT * FROM films WHERE id='(int)$_GET[id]', а второй запрос непосредственно на увеличения счетчика просмотров (тот что вам предложили)

Спустя 3 часа, 35 минут, 11 секунд (20.04.2011 - 15:46) datvid написал(а):
Большое спасибо за помощь!!!Я немного думал в другом направлении! Я создал дополнительную таблицу(выше указал)...И я все же думаю что должно получиться...Хотел бы воочию убедиться прав я или глубоко ощибаюсь.
Ты не мог бы подсказать,если знаешь как составить два запроса одновременно для одной страницы.Т.е как связаться сразу с двумя таблицами.?

Спустя 42 минуты, 45 секунд (20.04.2011 - 16:29) Renden написал(а):
datvid
Ну так делай на странице с фильмом типа того:

if (isset($_GET['id'])) {
$query = mysql_query("SELECT * FROM `content` WHERE id='".(int)$_GET['id']."'");
$row = mysql_fetch_assoc($query));

echo $row['title'].'</tr>'; //и тд тут вывод информации которой те надо

mysql_query("INSERT INTO `content_views` (`id`, `views`) VALUES ('.$row['id'].', 1)
ON DUPLICATE KEY UPDATE `views` = `views` + 1'"
);
}
//$row['id'] - это столбец c id, выбираемый из базы films

отредактировал под твой вариант..

Спустя 1 день, 8 часов, 18 минут, 37 секунд (22.04.2011 - 00:48) datvid написал(а):
У меня запрос для фильма выглядит так:

[sql]$sql = "SELECT * FROM `content` order by `id`desc LIMIT 0, 1";
$sql = "SELECT * FROM `content` where `id`=" . (int)$_GET['id'];

$result = mysql_query($sql) or die(mysql_error() ."<br/>". $sql);

Как именно для моего конкретного варианта прописать дополнительный запрос для вывода количества просмотров когда помимо основной таблицы "content"(в ней все фильмы),имеется также таблица content_views где две строки. id-ключевое поле и views.

Спустя 10 часов, 50 минут, 43 секунды (22.04.2011 - 11:38) Renden написал(а):
datvid
А подумать головой самому? Заменить таблицу в моем примере с films на content, а films_views заменить на content_views, и film_id заменить на id (смотря как там у тебя называется стобец с ключевым полем)

ЗЫ зачем тебе 2 запроса? $sql = "SELECT * FROM `content` order by `id`desc LIMIT 0, 1"; этот не нужен.

Спустя 18 дней, 7 часов, 22 минуты, 37 секунд (10.05.2011 - 19:01) datvid написал(а):
Здравствуйте!!! В результате ваших подсказок и и моего понимания их(видно не допонял подсказки) я создал код который должен выводить количество просмотров 'views'
Код разместил на отдельной странице где выводиться каждый в отдельности фильм!
Как я уже ранее писал что есть таблица content_views с полями views и id.
Код та разместил но получил "плачевный" результат, т.е. в таблице content_views появилась новаястрока с id=0 а views меняеться по принципу +1 при просматривании любого фильма!!
Помогите исправить ниже приведенный код пожалуйста!!



<?php

$table = "<table border=0 width=560px >\n";


$query = '
INSERT INTO content_views (`id`, `views`) VALUES ('
.(int)$id.', 1)
ON DUPLICATE KEY UPDATE `views` = `views` + 1'
;

mysql_query($query) or die(mysql_error() ."<br/>". $query);
while ($row = mysql_fetch_assoc($result))
{
$table .= "<tr>\n";

$table .= "<tr>".$row['title']."</tr>\n";
$table .= "<tr>".$row['fulltext']."</tr>\n";
$table .= "<tr>".$row['views']."</tr>\n";




$table .= "</tr>\n";
}

$table .= "</table>\n";

echo $table;


?>

Спустя 1 день, 3 часа, 25 минут, 21 секунда (11.05.2011 - 22:26) datvid написал(а):
Кто нибудь подскажите пожалуйста где ощибка в выше приведенном коде количества просмотров?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.