PDA

View Full Version : گفتگو: هم فکری کنید



masiha68
شنبه 05 اسفند 1391, 14:28 عصر
سلام به همگی
من روی یه سایتی کار می کنم منتها به بنبست خوردم
من نظرات رو با یه ای دی ( که همون ای دی پست هاست ) مقدار دهی می کنم . مثلا اگه یه پست ده تا نظر داشته باشه همشون ای دی شون یک عدده . اینجوری راحت می تونم با هر پست نظرها رو فراخوانی کنم و تا اینجاش مشکلی ندارم (البته اینم بگم که هر بار فقط یک پست نشون داده میشه ). مشکل از جایی شروع میشه که می خوام یه قسمت به اسم اخرین نظرات بذارم . اونجاست که نمی دونم چجوری نشون بدم هر نظر مال کدوم پسته
می دونم توضیحات کمه ... بیشتر بپرسین تا بیشتر توضیح بدم . فقط ممنون می شم بگین چجوری می تونم این مشکل رو حل کنم

thacker
شنبه 05 اسفند 1391, 16:50 عصر
توی جدولی که توی دیتابیس ساختید برای نظرات باید یه ستون بسازید که آی دی پستی که نظر براش ارسال شده رو درج کنه ... مثلا بگه فلان نظر برای پست با آی دی 4 هست !
بعد به راحتی میتونید توی بخش آخرین نظرات مشخص کنید که کدوم نظر مربوط به کدوم پست هست ...
موفق باشید ...

masiha68
شنبه 05 اسفند 1391, 17:03 عصر
ببینین دوست عزیز من کلا الان این کارو می کنم که به جای ای دی دادن به هر نظر از ای دی اون پست واسه نظر استفاده می کنم . مثلا یه پست ای دی ش 5 باشه پس من اگه دهتا نظر واسه اون پست داشته باشم الان ده تا نظر با ای دی 5 دارم . پس وقتی نظرات با ایدی 5 رو همراه با پست فراخوانی می کنم مشکلی پیش نمیاد . چون همراه با پست فراخوانی شده و هر کسی میدونه این نظرات مال این پسته ولی وقتی بخوام اخرین نظرات رو فراخوانی کنم نمی دونم چجوری نشون بدم این نظر مال این پسته یا نه مال یه پست دگه ست
الان خودمم گیج شدم چه برسه به شما

shahriyar3
شنبه 05 اسفند 1391, 17:03 عصر
2تا کوئری تو در تو بگیرید خیلی ساده هست
کوئری اول کل پست ها رو از اول تا آخر میخونه توی یک حلقه while مقادیر دونه دونه میخونید
داخل حلقه آیدی هر پست رو توی تیبل نظرات بررسی کنید و نظرات مرتبط با اون پست رو براحتی پیدا کنید

masiha68
شنبه 05 اسفند 1391, 17:08 عصر
دمت گرم شهریار
دقیقا زدی تو خال
فقط یه مثل بزن که دیگه رسما شرمنده مون کنی

shahriyar3
شنبه 05 اسفند 1391, 17:13 عصر
خواهش


$sql = mysql_query("SELECT * FROM `posts` ")or die(mysql_error());
while($show_posts = mysql_fetch_array($sql)){
$sql1 = mysql_query("SELECT * FROM `comments` WHERE `post_id` = '$show_category[id]'")or die(mysql_error());
while($show_comment = mysql_fetch_array($sql1)){
echo $show_comment['comment'];
}
}

siavashsay
شنبه 05 اسفند 1391, 17:41 عصر
اینکار باعث فشار آوردن بروی سرور نمیشه ؟!
استفاده حلقه تو در تو اونم برای SQL و تعداد بازدید بالا ؟!

shahriyar3
شنبه 05 اسفند 1391, 17:46 عصر
اینکار باعث فشار آوردن بروی سرور نمیشه ؟!
استفاده حلقه تو در تو اونم برای SQL و تعداد بازدید بالا ؟!
این مثالی که زدم خیلی کلی بود نهایتا برای گذاشتن آخرین نظرات از دستور limit استفاده میشه و گرنه من جائی ندیدم که مثلا هر 1000 تا پست ارسال رو به ترتیب با نظرات نمایش بدن
در بد ترین حالت هم از pagination قراره استفاده بشه که باز هم 10 تا سطر یا 30 تا سطر فراخوانی میشه
فکر نمیکنم فشاری زیادی به سرور بیاره
اگر شما روش صحیح تری بلد هستید میتونید بگید ما هم استفاده میکنیم

masiha68
شنبه 05 اسفند 1391, 18:44 عصر
ممنون ولی نفهمیدم کد چه جوری کار می کنه
ما توی کئوری اول همه ی پست های رو فراخوانی می کنیم و لی بعد ؟؟؟
از بابت فشار روی سرور هم خیالم راحته چون این کد فقط توی ادمین پنل اجرا میشه و فشاری روی سرور وارد نمی کنه

siavashsay
شنبه 05 اسفند 1391, 18:44 عصر
نه شهریار جان ! متوجه منظور من نشدی !
اتفاقا منم برای یک سیستم ( البته یه چیز دیگه ) مجبور شدم از همین حلقه تو در تو استفاده کنم ! مشکل اینجاس که نمیشه group by و order by رو توی یک sql نوشت !
البته راههایی رو دیدم توی stackerflow اما متوجه نشدم ! خیلی حرفه ای توضیح داده بودن !
اما منظورم اینه که فکر کنید اینجا 3 تا کوئری اضافه دارید میزنید ! حالا اگر همین بره روی بازدید 1000 تا میشه 3000 کوئری اضافه !
خوب این مشکل زا نمیشه !؟

shahriyar3
شنبه 05 اسفند 1391, 19:03 عصر
نه شهریار جان ! متوجه منظور من نشدی !
اتفاقا منم برای یک سیستم ( البته یه چیز دیگه ) مجبور شدم از همین حلقه تو در تو استفاده کنم ! مشکل اینجاس که نمیشه group by و order by رو توی یک sql نوشت !
البته راههایی رو دیدم توی stackerflow اما متوجه نشدم ! خیلی حرفه ای توضیح داده بودن !
اما منظورم اینه که فکر کنید اینجا 3 تا کوئری اضافه دارید میزنید ! حالا اگر همین بره روی بازدید 1000 تا میشه 3000 کوئری اضافه !
خوب این مشکل زا نمیشه !؟
آقا سیاوش متوجه منظورت نمیشم واقعا!!! چرا نمیشه از order by استفاده کرد؟
البته یه راه دیگه هم به جز این هست که از join استفاده کنیم ولی بازم چه زبطی به استفاده نکردن از order by داره آخه!!
بعدم شما میدونی که کوئری ها در میلی ثانیه اجرا میشن یعنی شما میگی در هر میلی ثانیه 1000 نفر بازدید کننده داری که دقیقا دارن اشاره میکنن به این کوئری؟
آره در این صورت فشار وارد میشه و باید از سرور با کانفیگ بهتر و قوی تر استفاده کنید.