[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Не могу создать количество просмотров страницы
Дэмегус
Уважаемые боги php, нужна ваша помощь, не знаю почему сам до сих пор не понял как, либо не знаю, либо не хочу знать, но дело вот в чем, есть большой сайт по продаже автомобилей, админка своя как и все остальное. Нужно, чтобы на каждом объявлении(странице) показывало определенные цифры просмотров страницы. Есть таблица называется houses в ней есть id присвоенное для каждой страницы, в таблице я добавил столбец count установил ей значение int и по умолчанию 0

Как через update для каждого id изменялся count +1 при просмотре страницы ???

Подскажите пожалуйста....



Спустя 23 минуты, 56 секунд (23.08.2011 - 12:33) neadekvat написал(а):
1. Запрос простой: "UPDATE tbl SET count = count + 1".
2. По архитектуре есть вопрос. Если в основной таблице хранятся редкоизменяемые значения (добавили инфу и на века), то динамичные поля типа "просмотров" лучше выносить в отдельную таблицу:
views
obj_id | views
где obj_id - это id объявления в основной таблице, views - количество просмотров.
И тут либо при добавлении объявления создавать соответствующую строку в таблице views, либо использовать запрос, который будет при просмотре страницы пытаться добавить новую строку, и если она существует - просто увеличивать значение:
INSERT INTO tbl (obj_id, views) VALUES ($obj_id, 1)
ON DUPLICATE KEY UPDATE views = views + 1

Спустя 28 минут, 56 секунд (23.08.2011 - 13:02) Дэмегус написал(а):
Спасибо большое за ответ, но если честно чуть чуть дуболом.
Если я правильно понял, то как вы сказали, я могу спокойно добавлять строку в имеющуюся таблицу, так как она не прерывно обновляется(редактируется), то фотографии меняются, то информация, ок я добавил строку count, что мне дальше делать?
Вот как я пишу, и правильно ли я пишу?

mysql_qw(
'UPDATE houses SET count=count+1
WHERE id='.$house.') - здесь я пишу запрос на изменение строки коунт+1 при условии отображении id

а далее в тексте я уже вставляю <?php echo $data[$i]['count']?> для отображения самого counta......

Было бы не плохо мне полностью подсказать как правильно написать.....извините за напряг.

Спустя 3 минуты, 4 секунды (23.08.2011 - 13:05) neadekvat написал(а):
Запрос почти верный. Ошибка, по-моему, в синтаксисе самого php - правильно ли там кавычки расставлены?
А уж вывод - это у каждого свое, как я тут могу что-то подсказать.

Спустя 9 минут, 40 секунд (23.08.2011 - 13:15) Дэмегус написал(а):
Нашел в интернете этот код:
if (isset($_GET['id'])) $id = $_GET['id'];
$result = mysql_query("SELECT *
FROM `houses`
WHERE id="
.(int)$id,$db);


$new_counter = (int)$myrow["counter"]+1;

$update = mysql_query("UPDATE `houses`
SET counter="
.(int)$new_counter."
WHERE id="
.(int)$id);


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

Спустя 1 минута, 13 секунд (23.08.2011 - 13:16) neadekvat написал(а):
Ясно. Думать ты не хочешь.
Удачи.

Спустя 41 минута, 50 секунд (23.08.2011 - 13:58) inpost написал(а):
Дэмегус
Тут добавляет +1 к просмотрам...

Спустя 26 минут, 28 секунд (23.08.2011 - 14:24) Дэмегус написал(а):
neadekvat
Вы правы. Голова уже болит думать......

Есть еще один вопрос

$pt = mysql_query('SELECT COUNT(brand) FROM houses where brand="Hyundai"');


Осталось теперь написать их вывод!?

??? <?php echo $pt;?> Вот так? не получается....

Спустя 48 секунд (23.08.2011 - 14:25) killer8080 написал(а):
Дэмегус
кривой код, откуда берётся $myrow["counter"]? Как минимум после query должен быть fetch_assoc.
if (isset($_GET['id'])) $id = $_GET['id'];
$result = mysql_query("SELECT *
FROM `houses`
WHERE id="
.(int)$id,$db);

$myrow = mysql_fetch_assoc($result);

$new_counter = (int)$myrow["counter"]+1;

$update = mysql_query("UPDATE `houses`
SET counter="
.(int)$new_counter."
WHERE id="
.(int)$id);

а вообще смысл делать несколько запросов, когда можно делать инкремент одним запросом.

Спустя 3 минуты, 58 секунд (23.08.2011 - 14:29) killer8080 написал(а):
Цитата (Дэмегус @ 23.08.2011 - 14:24)
??? <?php echo $pt;?> Вот так? не получается....

и не получиться
нужно так
$pt = mysql_fetch_assoc(mysql_query("SELECT COUNT(brand) AS `cnt` FROM houses where brand='Hyundai'"));
$pt = $pt['cnt'];

или
$pt = mysql_num_rows(mysql_query("SELECT * FROM houses where brand='Hyundai'"));

Спустя 3 минуты, 6 секунд (23.08.2011 - 14:32) inpost написал(а):
$pt = mysql_query("SELECT COUNT(`brand`) AS `cnt` FROM `houses` WHERE `brand`='Hyundai'");

// Вариант №1
$res = mysql_fetch_assoc($pt);
echo $res['cnt'];

// Вариант №2
$cnt = mysql_result($pt,0);
echo $cnt;

Спустя 1 минута, 28 секунд (23.08.2011 - 14:33) Дэмегус написал(а):
Киллер ВЫ МОЙ ГЕРОЙ!!!! хоть я и мужик, но ОГРОМНОЕ ВАМ СПАСИБО!!!

Спустя 4 минуты, 9 секунд (23.08.2011 - 14:38) inpost написал(а):
Дэмегус
А как же я? Я тебе 2 наиболее правильных варианта предложил smile.gif В отличии от второго варианта, который предложил Киллер... smile.gif

Спустя 2 минуты, 6 секунд (23.08.2011 - 14:40) Дэмегус написал(а):
Inpost и вам большое спасибо!!!!

Осталось теперь разобраться с количеством просмотров страниц

Спустя 1 час, 29 минут, 45 секунд (23.08.2011 - 16:09) Дэмегус написал(а):
Цитата (killer8080 @ 23.08.2011 - 11:25)
Дэмегус
кривой код, откуда берётся $myrow["counter"]? Как минимум после query должен быть fetch_assoc.
if (isset($_GET['id'])) $id = $_GET['id'];
$result = mysql_query("SELECT *
FROM `houses`
WHERE id="
.(int)$id,$db);

$myrow = mysql_fetch_assoc($result);

$new_counter = (int)$myrow["counter"]+1;

$update = mysql_query("UPDATE `houses`
SET counter="
.(int)$new_counter."
WHERE id="
.(int)$id);

а вообще смысл делать несколько запросов, когда можно делать инкремент одним запросом.

Killer у меня тупняк... user posted image
Вот и я хочу привести к минимуму, вообще не пойму зачем эти строчки нужны?
if (isset($_GET['id'])) $id = $_GET['id'];
$result = mysql_query("SELECT *
FROM `houses`
WHERE id="
.(int)$id,$db);


Не могли бы вы привести короче строчки, без всяких там подключений к базе...заранее спасибо

Спустя 3 часа, 59 минут, 33 секунды (23.08.2011 - 20:09) inpost написал(а):
Дэмегус
А как будет в БД храниться данные, если ты не будешь подключаться к БД и вносить записи?

Спустя 12 часов, 16 минут, 3 секунды (24.08.2011 - 08:25) Дэмегус написал(а):
inpost
Я сегодня проснулся, ехал в маршрутке и обдумывал все, что писалось в этой теме, и только потом осознал, что написал ахинею по поводу не подключения к базе. Почти всю суть я понял. Сейчас буду сидеть и ломать себе ученику голову, если что обязательно здесь отпишусь что я и да как сделал или не сделал. Спасибо большое.

Спустя 16 минут, 11 секунд (24.08.2011 - 08:41) inpost написал(а):
Дэмегус
Не вопрос. Приходи, будем ждать smile.gif

Спустя 26 минут, 1 секунда (24.08.2011 - 09:07) Дэмегус написал(а):
И так:
Вставил

include 'db.php';
if (isset($_GET['id'])) $id = $_GET['id'];
$result = mysql_query("SELECT *
FROM `houses`
WHERE id="
.(int)$id,$db);

$myrow = mysql_fetch_assoc($result);

$new_counter = (int)$myrow["counter"]+1;

$update = mysql_query("UPDATE `houses`
SET counter="
.(int)$new_counter."
WHERE id="
.(int)$id);

Далее вывод результата:
<?php echo (int)$myrow['counter']?>

Что происходит:
При каждом обновлении любой страницы прибавляется +1, получается на каждой странице одинаковые значения, посмотрел в базе, получается +1 прибавляется в строке id=0 =(((.....Как сделать чтобы не для 0 только прибавлялся +1, а +1 прибавлялся к тем id, которые открыли пользователи
Пример index.php?house=1308573064, где 1308573064 является id.

Спустя 2 минуты, 27 секунд (24.08.2011 - 09:10) inpost написал(а):
Дэмегус
if (isset($_GET['id'])) $id = $_GET['id']; - Что значит эта строчка? Почему у нас записано именно $_GET['id']?

Спустя 8 минут, 18 секунд (24.08.2011 - 09:18) Дэмегус написал(а):
Цитата (inpost @ 24.08.2011 - 06:10)
Дэмегус
if (isset($_GET['id'])) $id = $_GET['id']; - Что значит эта строчка? Почему у нас записано именно $_GET['id']?

Я так понял, что $_GET['id'] должен выбрать id открытой страницы.....

Спустя 4 минуты, 45 секунд (24.08.2011 - 09:23) inpost написал(а):
Дэмегус
http://www.linedmk.com/page54.html . Читай, если до сих пор не понял, дам другую ссылку

Спустя 15 минут, 5 секунд (24.08.2011 - 09:38) Дэмегус написал(а):
Inpost, вы настоящий учитель!!! Спасибо вам большое, разобрался, заменил id на house все работает, так как нужно!
 if (isset($_GET['house'])) $id = $_GET['house'];

Спустя 3 минуты, 10 секунд (24.08.2011 - 09:41) Дэмегус написал(а):
А привязать ip адреса смотрящих объявление в сутки, выполнить сложно? что нужно сделать?smile.gif

Спустя 49 минут, 58 секунд (24.08.2011 - 10:31) killer8080 написал(а):
Цитата (Дэмегус @ 24.08.2011 - 09:41)
А привязать ip адреса смотрящих объявление в сутки, выполнить сложно? что нужно сделать?

Нужно создать отдельную таблицу, и в ней фиксировать все хиты. Примерно такого вида
CREATE TABLE `hits` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT ,
`obj_id` INT UNSIGNED NOT NULL ,
`ip` INT UNSIGNED NOT NULL ,
`time` TIMESTAMP DEFAULT NOW( ) NOT NULL ,
PRIMARY KEY ( `id` )
)
и соответственно фиксировать хиты при заходе на страницу
mysql_query("INSERT INTO `hits` (`obj_id`, `ip`) VALUES (".(int)$_GET['house'].", INET_ATON('".$_SERVER['REMOTE_ADDR']."'))");


Но учти что под одним IP может сидеть много юзеров :)

Спустя 7 минут, 24 секунды (24.08.2011 - 10:38) inpost написал(а):
Дэмегус
Расширю ответ Киллера, IP ведётся исключительно для внутренней статистики, чтобы контролировать и анализировать рекламную политику сайтов, в основном.
Ничего делать с данными нельзя, просто хранить как отчет или как статистику.

Спустя 23 часа, 7 минут, 7 секунд (25.08.2011 - 09:45) Дэмегус написал(а):
Спасибо ребят!)
Быстрый ответ:

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