PDA

View Full Version : سوال: ركوردهاي ثبت شده بين دو تاريخ



ravand
جمعه 26 اسفند 1390, 10:40 صبح
سلام.
من دارم روي يه آمارگير كار ميكنم.
ميخوام برنامه اي بنويسيم كه ركوردهاي ثبت شده بين ساعت 12 شب امروز تا 12 شب فردا رو كه 24 ساعت ميشه رو جمع كنم. تا اينطوري بتونم بازديد كنندگان امروز رو بدست بيارم.
متشكرم.

hightech
جمعه 26 اسفند 1390, 10:47 صبح
آمار امروز:
SELECT COUNT(*) FROM myTable WHERE DATE(myDateRow) = CURDATE()

آمار دیروز:
SELECT COUNT(*) FROM myTable WHERE DATE_SUB(CURDATE(), INTERVAL 1 DAY)

ravand
یک شنبه 28 اسفند 1390, 10:02 صبح
داداش مي توني در مورد قسمت هاي مختلف اين كد بگي؟
الان اين كد منه چون در مورد اين چيزي كه شما گفتي درست نميدونم براي همين بلد نيستم توي كدم قرارش بدم:

<?php
include('jdf.php');
$servername="localhost";
$dbname="search3";
$user="root";
$pass="";
$dblink=mysql_connect($servername,$user,$pass);
mysql_select_db($dbname,$dblink);
mysql_query("SET CHARACTER SET utf8",$dblink);
$dbresult=mysql_query("SELECT * FROM amari",$dblink);
while($record=mysql_fetch_assoc($dbresult))
{
$id=($record['id']);
}
mysql_close($dblink);
?>
الان توي كدهايي كه شما دادي myTable اسم جدول ماست.date هم نام فيلد تاريخ ماست حالا اين myDateRow و CURDATE() كارشون چيه؟ و همينطور كد بعدي؟
متشكرم.

ravand
یک شنبه 28 اسفند 1390, 15:23 عصر
آمار امروز:
SELECT COUNT(*) FROM myTable WHERE DATE(myDateRow) = CURDATE()

آمار دیروز:
SELECT COUNT(*) FROM myTable WHERE DATE_SUB(CURDATE(), INTERVAL 1 DAY)

من در مورد دستور شما تحقيق كردم و اين دستور شما به كار من نمياد.
سوال من اين بود كه چجوري مي شه تعداد ركوردهاي ثبت شده در امروز رو چاپ كرد؟ منظورم جمع ركوردهاست. مثلا امروز 33 ركورد ثبت شده برام بنويسه 33 .
متشكرم.

MMSHFE
یک شنبه 28 اسفند 1390, 16:49 عصر
شما توی جدولتون فیلدی دارین که تاریخ ثبت مطلب رو توش قرار بدین؟

ravand
یک شنبه 28 اسفند 1390, 17:03 عصر
بله من توي جدولم يه فيلد دارم به نام ديتاتايم كه تاريخ رو ثبت ميكنه

MMSHFE
یک شنبه 28 اسفند 1390, 17:20 عصر
خوب توی اون فیلد timestamp رو ذخیره میکنید؟

ravand
یک شنبه 28 اسفند 1390, 17:22 عصر
من تاريخ رو توي فيلد datatime ذخيره ميكنم.

MMSHFE
یک شنبه 28 اسفند 1390, 17:42 عصر
نه اینو میدونم. میگم توی همین فیلدتون، تاریخ رو بصورت عددی (timestamp) ذخیره میکنید یا بصورت رشته ای (مثل 2012/03/18) ؟

ravand
یک شنبه 28 اسفند 1390, 17:45 عصر
تاريخ اينطوري ذخيره ميشه مهندس:

2012-03-19 04:43:18

MMSHFE
یک شنبه 28 اسفند 1390, 18:03 عصر
خوب این کد رو ببینید:

$query = 'SELECT COUNT(*) AS `tcount` FROM `mytable` WHERE (SUBSTRING(`datatime`, 0, 10)=\''.date('Y-m-d').'\')';
با اجرای کوئری فوق، تعداد رکوردهای امروز رو خواهید داشت. موفق باشید.

ravand
یک شنبه 28 اسفند 1390, 18:16 عصر
متشكر مهندس ولي من نميدونم كدهاي شما رو چجوري جايگزين كنم :لبخند:
اين كدهاي منه:
<?php
include('jdf.php');
$servername="localhost";
$dbname="search";
$user="root";
$pass="";
$dblink=mysql_connect($servername,$user,$pass);
mysql_select_db($dbname,$dblink);
mysql_query("SET CHARACTER SET utf8",$dblink);
$dbresult=mysql_query("SELECT * FROM amari",$dblink);
while($record=mysql_fetch_assoc($dbresult))
{
$id=($record['id']);
$date=jdate("Y/m/d h:i:s",strtotime($record["date"]));

}
mysql_close($dblink);
?>
<table align="center" border="1">
<tr>
<td>
<?php echo $id; ?>
</td>
<td>
آمار امروز
</td>
</tr>
<tr>
<td>
<?php echo $date; ?>
</td>
<td>
تاريخ
</td>
</tr>
</table>

MMSHFE
یک شنبه 28 اسفند 1390, 19:03 عصر
<?php
include_once 'jdf.php';
$servername = 'localhost';
$dbname = 'search';
$user = 'root';
$pass = '';
mysql_connect($servername, $user, $pass) or die('Connection error');
mysql_select_db($dbname) or die('Database error');
mysql_query('SET NAMES \'utf8\'');
$dbresult = mysql_result(mysql_query('SELECT COUNT(*) AS `tcount` FROM `mytable` WHERE (SUBSTRING(`datatime`, 0, 10)=\''.date('Y-m-d').'\')'), 0, 0);
echo 'آمار امروز : '.$dbresult;
?>

alismith
یک شنبه 28 اسفند 1390, 19:08 عصر
سلام

جناب شهرکی که جواب دادن، query ایشون رو به database بفرستید و تعداد رکورد هایی که در تاریخ مورد نظر درج شدن رو به عنوان تعداد بازدید روز چاپ کنید


$Today = mysql_result(mysql_query('SELECT COUNT(*) AS `tcount` FROM `mytable` WHERE (SUBSTRING(`datatime`, 0, 10)=\''.date('Y-m-d').'\')'),0,0);

mysql_result کار fetch کردن خروجی مطابق با سطر و ستون رو براتون انجام میده


موفق باشید

alismith
یک شنبه 28 اسفند 1390, 19:15 عصر
ببخشید ندیدم شما جواب دادید مهندس! :لبخندساده:

ravand
یک شنبه 28 اسفند 1390, 19:19 عصر
همين خط برام اخطار ميده :

$dbresult = mysql_result(mysql_query('SELECT COUNT(*) AS `tcount` FROM `amari` WHERE (SUBSTRING(`datatime`, 0, 10)=\''.date('Y-m-d').'\')'), 0, 0);
خطاي
Warning: mysql_result(): supplied argument is not a valid MySQL result resource in F:\wamp\wamp\www\amargir\chap.php on line 10

MMSHFE
یک شنبه 28 اسفند 1390, 23:55 عصر
خوب با mysql_error خطا رو نمایش بدین ببینیم مشکل کجاست چون حقیقتش بخاطر عدم دسترسی به داده های نمونه، بصورت واقعی تست نکردم. اگه خطایی که تولید شده رو نشون بدین، بهتر میشه راهنمایی کنیم چون هشدار مربوطه داره میگه پارامتر mysql_result یک خطای گرامری SQL داشته و بخاطر همین یک Resource معتبر تولید نکرده. موفق باشید.

alismith
دوشنبه 29 اسفند 1390, 00:15 صبح
این query رو امتحان کنید :


$dbresult = mysql_result(mysql_query('SELECT COUNT(*) AS `tcount` FROM `amari` WHERE (SUBSTRING(`datatime`, 0, 10)='.date('Y-m-d').')'), 0, 0);




موفق باشید

ravand
دوشنبه 29 اسفند 1390, 08:58 صبح
هيچ پيامي بهم نميده و صفحه كاملاً خالي هست:

<?php
$servername = 'localhost';
$dbname = 'search';
$user = 'root';
$pass = '';
mysql_connect($servername, $user, $pass) or die('Connection error')or die(mysql_error());
mysql_select_db($dbname) or die('Database error');
mysql_query('SET NAMES \'utf8\'');
$dbresult = mysql_result(mysql_query('SELECT COUNT(*) AS `tcount` FROM `amari` WHERE (SUBSTRING(`date`, 0, 10)=\''.date('Y-m-d').'\')'), 0, 0)or die(mysql_error());
echo 'آمار امروز : '.$dbresult;
?>
اسم فيلد من date هست و نوعش datatime.
وقتي اين دستور رو حذف ميكنم مي نويسه بازديد امروز صفر:

or die(mysql_error());
البته اينم بگم كه من امروز هم از صفحه بازديد كردم تا يه آمار بندازه. يعني امروزم بازديد داشتم.
متشكرم.

MMSHFE
دوشنبه 29 اسفند 1390, 10:03 صبح
...or die رو حذف کنید. این روش استفاده از اون صحیح نیست. میشه یک Screenshot از محیط phpMyAdmin در لحظه نمایش اطلاعات جدول amari بگذارین؟ میخوام ببینم چه اطلاعاتی داره. حتی الأمکان طوری باشه که محتویات فیلد date شما دیده بشه.

ravand
دوشنبه 29 اسفند 1390, 10:09 صبح
84412
اينم يك خروجي از جدول amari

MMSHFE
دوشنبه 29 اسفند 1390, 11:33 صبح
خدا بگم این MySQL رو چیکار کنه که اندیسهاش رو از 1 شروع میکنه! این کد رو اجرا کنید:


<?php
$servername = 'localhost';
$dbname = 'search';
$user = 'root';
$pass = '';
mysql_connect($servername, $user, $pass) or die('Connection error')or die(mysql_error());
mysql_select_db($dbname) or die('Database error');
mysql_query('SET NAMES \'utf8\'');
$dbresult = mysql_result(mysql_query('SELECT COUNT(*) AS `tcount` FROM `amari` WHERE (SUBSTRING(`date`, 1, 10)=\''.date('Y-m-d').'\')'), 0, 0)or die(mysql_error());
echo 'آمار امروز : '.$dbresult;
?>

موفق باشید.

ravand
دوشنبه 29 اسفند 1390, 13:48 عصر
متشكرم
حالا براي بازديد ديروز بايد چيكار كنم؟ و چه چيزي جايگزين كنم؟

MMSHFE
دوشنبه 29 اسفند 1390, 20:29 عصر
<?php
$servername = 'localhost';
$dbname = 'search';
$user = 'root';
$pass = '';
mysql_connect($servername, $user, $pass) or die('Connection error')or die(mysql_error());
mysql_select_db($dbname) or die('Database error');
mysql_query('SET NAMES \'utf8\'');
$dbresult = mysql_result(mysql_query('SELECT COUNT(*) AS `tcount` FROM `amari` WHERE (SUBSTRING(`date`, 1, 10)=\''.date('Y-m-d', time() - 86400).'\')'), 0, 0)or die(mysql_error());
echo 'آمار امروز : '.$dbresult;
?>

کلاً پارامتر دوم تابع date که timestamp رو میگیره و تبدیل به تاریخ میکنه، میتونه تاریخ هر روزی باشه. حالا برای دیروز، کافیه 86400 ثانیه از امروز کم کنید. برای یک هفته قبل، 86400*7 و الی آخر
موفق باشید.