PDA

View Full Version : تعداد سطر گرفتن از دیتابیس



tem988
دوشنبه 01 فروردین 1390, 23:49 عصر
سلام
من میخوام مثلا تعداد پست های توی هر موضوع رو بگیرم
مثلا اگر توی یک موضوع که 10 تا ارسال شده کوئریشو بنویسم تعدادشو برام بگیره
البته خودم سه مدل نوشتم ولی وقتی پست ها یا موضوعات زیاد بشه روی سرور فشار میارن
اگر میشه یک کوئری سبک تر از یک روش دیگه راهنمایی کنید
عیدتون هم مبارک
ممنون


mysql_num_rows(mysql_query("select id from posts where FIND_IN_SET('$idcat', idcat) > 0 "));

mysql_num_rows(mysql_query("select id from posts where idcat = 'idcat' "));

$count = mysql_fetch_array(mysql_query("select * from posts where idcat = 'idcat' "));
$countA = $count[id];
$countA [0];

maysam.m
سه شنبه 02 فروردین 1390, 10:55 صبح
سلام

از تابع COUNT استفاده کن ببین چطور میشه. مثلا اینطوری:


$sql = "select COUNT(id) as 'num' from posts FIND_IN_SET('$idcat', idcat) > 0 ";
$query = mysql_query($sql);
$result = mysql_fetch_assoc($query);
$count_field = $result['num'];

binyaft
سه شنبه 02 فروردین 1390, 11:15 صبح
برای سریعتر بودن بهتر هست تعداد پستهای هر موضوع رو ذخیره کنید و نمایش بدید .

موفق باشید

tem988
سه شنبه 02 فروردین 1390, 11:51 صبح
اقا میثم اون راه مثل راههای قبلی تقریبا یکسان هستند
من هم تعداد رو میگیرم و توی یک فیلد ذخیره میکنم ولی وقتی پست جدید میدم باید از موضوعاتی که تیک خوردند رو دوباره تعداد بگیره
پستهای من بالا 10.000 تاست و یکم طول میکشه تا تعداد بگیره
برای همین دنبال یک راه سریعتر هستم

binyaft
سه شنبه 02 فروردین 1390, 11:56 صبح
من هم تعداد رو میگیرم و توی یک فیلد ذخیره میکنم ولی وقتی پست جدید میدم باید از موضوعاتی که تیک خوردند رو دوباره تعداد بگیره
منظورتو نفهمیدم!
اما اگر تعداد رو ثبت کنی با ارسال هر پست یکی به اون اضافه کنی و با حذف هر پست یکی از اون کم کنی ، سرعتت بالاتر میره!

tem988
سه شنبه 02 فروردین 1390, 12:09 عصر
موضوعات من طوری که برای هر پست میتونی چندین موضوع انتخاب کنی
این که میگی وقتی پست ارسال میکنی به اونایی فرستاده میشن یکی اضافه کنم میشه
ولی وقتی ویرایش کنم مثلا شاید موضوعات رو تغییر بدم یا فقط یکیشونه تغییر بدم اینطوری هر چی فکر میکنم نمیشه یعنی تست هم کردم قاطی کرده

maysam.m
سه شنبه 02 فروردین 1390, 20:42 عصر
tem988 جان

من دقیقا نفهمیدم میخوای چی کار کنی! :دی
پیشنهاد میکنم از کش استفاده کنی. خود من برای ایجاد لیست موضوعاتم و اینکه چند تا پست توی هر موضوع هست از کش استفاده میکنم. کافیه این لیست رو هر مثلا هر 48 ساعت یک بار کش کنی و هر 48 ساعت یک بار کش رو به روز کنی. به نظرم این روش کارآمده و در هر بار درخواست کاربر کوئری به دیتابیس ارسال نمیشود و اطلاعات از فایل کش خوانده میشود.

tem988
سه شنبه 02 فروردین 1390, 23:08 عصر
میتونی این روش کش رو برام کدهاشو بدی ممنون میشم

maysam.m
چهارشنبه 03 فروردین 1390, 11:57 صبح
میتونی این روش کش رو برام کدهاشو بدی ممنون میشم

این کد رو خودم استفاده میکنم:



<?php

function show_category() {


$cachefile = './cache/category_list.html';


$cachetime = 48 * 3600; // 48 Hours


// Serve from the cache if it is younger than $cachetime

if (file_exists($cachefile) && (time() - $cachetime
< filemtime($cachefile)))
{

return file_get_contents($cachefile);

}

else {

$show = get_category(); // call show category function and save category`s data in file.
$fp = @fopen($cachefile, 'w');

if($fp) {
fwrite($fp, $show);

fclose($fp);

return file_get_contents($cachefile);
}

else {
return $show;
}

}



}

?>


اما نحوه کارکرد کد:

ما برای نمایش لیست موضوعاتمون این تابع را فراخوانی میکنیم و میگیم اگر اون فایل مشخص وجود داشت و از ایجاد اون 48 ساعت نگذشته بود در این صورت اطلاعات اون فایل را که کش شده دریافت و به مرورگر ارسال کن.

اما اگر اون فایل نبود یا زمان ساخته شدنش از 48 ساعت گذشته بود میاییم تابع get_category() که مسئول ساخت لیستمون است رو نشون میدیم. و محتوای این تابع را در فایل کش ذخیره و اون رو نمایش میدیم.

در اینجا میتونیم دو کار کنیم:
1- بیاییم کل لیست موضوعات و تعداد پستهای هر موضوع را به وسیله این تابع بدست بیاریم و به صورت html در فایل کش ذخیره کنیم.
2- میتونیم لیستمون رو به صورت آرایه و با کمک تابع serialize (http://php.net/manual/en/function.serialize.php) در فایل ذخیره کنیم و موقع استفاده هم اون رو به وسیله unserialize (http://php.net/manual/en/function.unserialize.php) بازیابی کنیم.

من از روش اول استفاده میکنم.