PDA

View Full Version : سوال: آمار امروز و دیروز و ماه و کل



p30graph3
جمعه 16 بهمن 1388, 14:05 عصر
سلام

یک الگوریتم ساده و یک ساختار ساده جدول mysql برای ساختن امار گیری که امار کل ، آمار امروز و دیروز و هر ماه و هر سال رو نشون بده میتونید بگید؟

میخوام به سیستمم اضافه کنم

p30graph3
جمعه 16 بهمن 1388, 20:14 عصر
کسی نیست جواب بده؟

digitak
جمعه 16 بهمن 1388, 22:19 عصر
برای این کار به دوتا جدول نیاز داری
یکی برای نگهداری آمار کد که یک فیلد نیاز داره ! مثلا به اسم total_count

یکی دیگه هم برای شمارش آمار روزانه
برای هر روز یک رکورد اضافه می کنی
جدول هم به سه تا فیلد نیاز داره : id , count , date
count که تعداد بازدید روز رو توش میریزی
تاریخ هم تاریخ روز هست

برای بدست آوردن بازدید امروز ، رکوردی روبر میگردونی که تاریخش با تاریخ امروز یکی باشه
برای به دست آوردن آمار دیروز فیلد یکی مانده به آخر رو بر می گردونی
برای این ماه هم 30 تای آخر
برای سال هم 365 تای آخر

موفق باشی

p30graph3
شنبه 17 بهمن 1388, 11:27 صبح
ممنون

ببینید این ساختار چطوره:


CREATE TABLE `counter_ips` (
`ip` varchar(15) NOT NULL,
`visit` datetime NOT NULL,
UNIQUE KEY `ip` (`ip`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;


CREATE TABLE `counter_values` (
`id` bigint(11) NOT NULL,
`day_id` bigint(11) NOT NULL,
`day_value` bigint(11) NOT NULL,
`yesterday_id` bigint(11) NOT NULL,
`yesterday_value` bigint(11) NOT NULL,
`week_id` bigint(11) NOT NULL,
`week_value` bigint(11) NOT NULL,
`month_id` bigint(11) NOT NULL,
`month_value` bigint(11) NOT NULL,
`year_id` bigint(11) NOT NULL,
`year_value` bigint(11) NOT NULL,
`all_value` bigint(11) NOT NULL,
`record_date` datetime NOT NULL,
`record_value` bigint(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;


دیگه هفته هم داره!

ممنون

digitak
شنبه 17 بهمن 1388, 12:17 عصر
با این تیبل کد نویسیت خیلی سخت میشه !
از همون روشی که گفتم استفاده کن ! خیلی راحت تره . من روی 5-6 تا سیستم که می نوشتم از همون روش استفاده کردم

tami64
پنج شنبه 06 اسفند 1388, 02:26 صبح
http://www.taymaz.ir/download_42_%D8%B4%D9%85%D8%A7%D8%B1%D9%86%D8%AF%D 9%87%28%D8%B3%DB%8C%D8%B3%D8%AA%D9%85+%D8%A2%D9%85 %D8%A7%D8%B1%DA%AF%DB%8C%D8%B1%DB%8C+%D9%88%D8%A8% 29.html

www.taymaz.ir

guy18iran
پنج شنبه 06 اسفند 1388, 07:40 صبح
دوست عزیز بنده قبلا یه همچین کدی نوشتم. البته فضای کمتری توی DB اشغال میکنه اما کمی فرآیند انجام کارش طولانیه. اینجا براتون میذارم شاید به دردتون بخوره. :چشمک:


$today = array();
$yesterday = array();
$week = array();
$month = array();

$sql = "SELECT * FROM stats";
$result = dbquery($sql);
while ($data = dbarray($result)) {
$today = explode("|", $data['today']);
$yesterday = explode("|", $data['yesterday']);
$week = explode("|", $data['week']);
$month = explode("|", $data['month']);
$total = $data['total'];
}

$ip = $_SERVER['REMOTE_ADDR'];
$timeout = time() + (5 * 60);

$delete = "DELETE FROM active_users WHERE timeout < ".time()."";
dbquery($delete);

$sql = "SELECT * FROM active_users WHERE ip='".$ip."'";
$result = dbquery($sql);
if (dbrows($result) > 0) {
$update = "UPDATE active_users SET timeout='".$timeout."' WHERE ip='".$ip."'";
dbquery($update);
} else {
$insert1 = "INSERT INTO active_users VALUES('0', '".$ip."', '".$timeout."')";
dbquery($insert1);
if ($today[0] == date("ynj", time()) && $week[0] == date("W", time()) && $month[0] == date("n", time())) {
$today[1]++;
$week[1]++;
$month[1]++;
$total++;
$insert2 = "UPDATE stats SET today='".date("ynj", time())."|".$today[1]."', week='".date("W", time())."|".$week[1]."', month='".date("n", time())."|".$month[1]."', total='".$total."' WHERE id='1'";
} elseif ($today[0] == date("ynj", time() - 86400) && $week[0] == date("W", time()) && $month[0] == date("n", time())) {
$yesterday[0] = $today[0];
$yesterday[1] = $today[1];
$today[0] = date("ynj", time());
$today[1] = 1;
$week[1]++;
$month[1]++;
$total++;
$insert2 = "UPDATE stats SET today='".$today[0]."|".$today[1]."', yesterday='".$yesterday[0]."|".$yesterday[1]."', week='".date("W", time())."|".$week[1]."', month='".date("n", time())."|".$month[1]."', total='".$total."' WHERE id='1'";
} elseif ($today[0] == date("ynj", time() - 86400) && $week[0] == date("W", time() - 604800) && $month[0] == date("n", time())) {
$yesterday[0] = $today[0];
$yesterday[1] = $today[1];
$today[0] = date("ynj", time());
$today[1] = 1;
$week[0] = date("W", time());
$week[1] = 1;
$month[1]++;
$total++;
$insert2 = "UPDATE stats SET today='".$today[0]."|".$today[1]."', yesterday='".$yesterday[0]."|".$yesterday[1]."', week='".$week[0]."|".$week[1]."', month='".date("n", time())."|".$month[1]."', total='".$total."' WHERE id='1'";
} elseif ($today[0] == date("ynj", time() - 86400) && $week[0] == date("W", time() - 604800) && (date("n", time()) - $month[0]) == 1) {
$yesterday[0] = $today[0];
$yesterday[1] = $today[1];
$today[0] = date("ynj", time());
$today[1] = 1;
$week[0] = date("W", time());
$week[1] = 1;
$month[0] = date("n", time());
$month[1] = 1;
$total++;
$insert2 = "UPDATE stats SET today='".$today[0]."|".$today[1]."', yesterday='".$yesterday[0]."|".$yesterday[1]."', week='".$week[0]."|".$week[1]."', month='".$month[0]."|".$month[1]."', total='".$total."' WHERE id='1'";
}
dbquery($insert2);
}

$sql = "SELECT * FROM stats";
$result = dbquery($sql);
while ($data = dbarray($result)) {
$today = explode("|", $data['today']);
$yesterday = explode("|", $data['yesterday']);
$week = explode("|", $data['week']);
$month = explode("|", $data['month']);
$total = $data['total'];
}

define("ACTIVE_USERS", dbcount("id", "active_users"));
define("TODAY_VISITS", $today[1]);
define("YESTERDAY_VISITS", $yesterday[1]);
define("WEEK_VISITS", $week[1]);
define("MONTH_VISITS", $month[1]);
define("TOTAL_VISITS", $total);


و این هم کد مربوط به ساخت جدول ها:


CREATE TABLE IF NOT EXISTS `active_users` (
`id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
`ip` varchar(200) COLLATE utf8_persian_ci NOT NULL,
`timeout` int(10) unsigned NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_persian_ci AUTO_INCREMENT=96 ;

CREATE TABLE IF NOT EXISTS `stats` (
`id` tinyint(1) unsigned NOT NULL,
`today` varchar(10) COLLATE utf8_persian_ci NOT NULL,
`yesterday` varchar(10) COLLATE utf8_persian_ci NOT NULL,
`week` varchar(10) COLLATE utf8_persian_ci NOT NULL,
`month` varchar(10) COLLATE utf8_persian_ci NOT NULL,
`total` int(10) unsigned NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_persian_ci;