ببین فرض کن من 5 تا کتگوری دارم و تو هر کتگوری 10 تا مطلب هست.سوالت واضح نیست.
لطفاً بیشتر توضیح و اطلاعات بده
$AllCats_Q = mysql_query("SELECT * FROM cats", $connection) or die(mysql_error());
$AllCats = mysql_fetch_assoc($AllCats_Q);
do {
$LastNews_Q = mysql_query("SELECT * FROM entries WHERE cat='".$AllCats['id']."' LIMIT 5", $connection) or die(mysql_error());
$LastNews = mysql_fetch_assoc($LastNews_Q);
do {
echo $LastNews['title'];
} while ($LastNews = mysql_fetch_assoc($LastNews_Q));
} while ($AllCats = mysql_fetch_assoc($AllCats_Q));
اون روش رو امتحان کرده بودم!خواهش میکنم . وظیفه بود . ولی میشه بپرسم مگر اجرای تعداد زیاد کوئری چه مشکلی داره ؟ تا جایی که من میدونم سرعت کار با پایگاه داده خیلی بالاست . پس مشکل سرعت نباید باشه . بعدشن حالا اگر 2 ثانیه بشه 3 ثانیه آسمون به زمین که نمیاد .
$qry="SELECT id FROM categories";
$result=mysql_query($qry);
$i=0;
while($row = mysql_fetch_assoc($result)){
$cat[$i]=$row['id'];
$i++;
}
unset($result);
unset($qry);
$qry="";
for($i=0;$i<sizeof($cat);$i++){
$qry.="(SELECT * FROM entry WHERE cat_id='{$cat[$i]}' LIMIT 0,10) UNION ";
}
$qry=substr($qry,0,-7);
$result=mysql_query($qry);
8 ثانیه؟!!!!!!!!!!!!!!!سلام
تستش کردم خیلی خوب کار میکرد ولی هنوز یخیلی کند هست!
تو این حالت حدود 8 ثانیه زمانش زیادتر شد !
اگه تعداد کتگوری ها هم بیشتر بشه این زمان خیلی زیاد تر میشه!
نمیشه اینو کوچیکترش کرد؟
تو اون حالت که صالا هنگ میکنه!!8 ثانیه؟!!!!!!!!!!!!!!!
بعید میدونم.
یه تجدید نظری بکن.
مگه چند تا کتگوری داری؟
این کوئری تا چند ده کتگوری هم که داشته باشی، باید سریع کار کنه.
شما یه بار 10 تا رکورد یک کتگوری رو بدون union از دیتابیس fetch کن، ببین چقدر زمان میبره، بعدش اینو تست کن، بعد تفاوتشون رو حساب کن.
اگر واقعاً در هر دو حالت، اینقدر زمانبر هست، مشکل از جای دیگه است
<?php
function fetch_arr($sql)
{
$res=mysql_query($sql);
while($row=mysql_fetch_assoc($res))
{
$rows[]=$row;
}
mysql_free_result($res);
return $rows;
}
$qry="SELECT id FROM categories";
$result=mysql_query($qry);
$i=0;
while($row = mysql_fetch_assoc($result)){
$cat[]=$row['id'];
}
unset($result,$qry);
$count=count($cat);
for($i=0;$i<$count;$i++){
$qry="SELECT * FROM entry WHERE cat_id='{$cat[$i]}' LIMIT 0,10";
$rows[]=fetch_arr($qry);
}
echo "<pre>";
print_r($rows);
?>
سلاممن با اجازه I,NoBody کدشو یخورده تغییر دادم
البته تست نکردم احتمال خطا وجود داره
PHP:<?php function fetch_arr($sql) { $res=mysql_query($sql); while($row=mysql_fetch_assoc($res)) { $rows[]=$row; } mysql_free_result($res); return $rows; } $qry="SELECT id FROM categories"; $result=mysql_query($qry); $i=0; while($row = mysql_fetch_assoc($result)){ $cat[]=$row['id']; } unset($result,$qry); $count=count($cat); for($i=0;$i<$count;$i++){ $qry="SELECT * FROM entry WHERE cat_id='{$cat[$i]}' LIMIT 0,10"; $rows[]=fetch_arr($qry); } echo "<pre>"; print_r($rows); ?>
تست کن ، جوابشو بده
راستی تعداد کتگوری ها شاید ده تا هم نشه!8 ثانیه؟!!!!!!!!!!!!!!!
بعید میدونم.
یه تجدید نظری بکن.
مگه چند تا کتگوری داری؟
این کوئری تا چند ده کتگوری هم که داشته باشی، باید سریع کار کنه.
شما یه بار 10 تا رکورد یک کتگوری رو بدون UNION از دیتابیس fetch کن، ببین چقدر زمان میبره، بعدش اینو تست کن، بعد تفاوتشون رو حساب کن.
اگر واقعاً در هر دو حالت، اینقدر زمانبر هست، مشکل از جای دیگه است
شما با ديتابيس قدرتمندي به نام MySQL داري كار ميكني. مي توني بهتر از اينها جواب بگيري.راستی تعداد کتگوری ها شاید ده تا هم نشه!
اون entryها زیاد هست! 500 هزارتا به بالا
در كدوم حالت هنگ ميكنه؟تو اون حالت که صالا هنگ میکنه!!
ببین من علاوه بر اون یه like هم تو کوئری دارم! ولی اگه like رو هم حذف کنم تفاوتش 2 ثاینه میشه!
البته دیتابیسم خیلی بزرگ هست! حدود500000 تا رکورد توش هست
$qry.="SELECT * FROM entry WHERE cat_id='4' LIMIT 0,10";
$result=mysql_query($qry);