سلام دوستان
من هرچی از دستور استفاده میکنم نشون نمیده و خطا هم نمیده که بفهمم مشکل چیه!
ممنون میشم دستور رو برام قرار بدید
فرض کنین یک جدول post داریم
و یک جدول comment داریم و این جدول یک ستون به اسم idpost داره یعنی هر کامنتی ک ثبت میشه ایدی پست اونم نوشته میشه
الان میخام سلکت کنم تعداد کامنت های اون پست و نشون بدم چیکار کنم؟
خوب الان شما دارید کوئری صحیح میزنید و این مشکل اول حل شد. پس اون نحوه پاس دادن متغیرتون به کوئری اشتباهه در درجه اول منظورم اینجا هست:
$sql = "SELECT count(*) FROM comment WHERE id_post='$postid_db'";
// نیازی به تک کوتیشن ها نیست!
$sql = "SELECT count(*) FROM comment WHERE id_post=$postid_db";
مورد بعدی اینکه این مربوط به sql هست میتونید اسم ستون رو تغییر بدید. کوئری رو به این صورت بنویسید
$sql = "SELECT count(*) as tedad FROM comment WHERE id_post=$postid_db";
اینطوری از این به بعد داخل ارایه دریافتیتون کلید مقادیر tedad
هست و بصورت $row->tedad
بهش دسترسی دارید.
کلا هم باید دانش خوبی از SQL داشته باشید و هم PHP. خیلی چیزها به مرور زمان و تجربه ب دست میاد. اما پیشنهاد میکنم باز هم روی مطالب مرور کنید و به یک دوره خاص اکتفا نکنید.
امیدوارم که این مطالب مشکلتون حل کرده باشه. اگر هنوز مشکلی بود مطرح کنید
@ajdar9667
ممنون ولی من خودمم همینطوری وارد میکنم ولی چیزی اتفاق نمیفته
$sql = "SELECT count(*) FROM comment WHERE id_post='$postid_db'";
$res = mysqli_query($connection,$sql);
while ($row = mysqli_fetch_assoc($res)){
$id_row_post = $row['id_post'];
}
😐چرا روش حلقه زدی ؟ این تعداد کامنت های یک پست رو بر میگردونه حلقه براچی میزنی
اصلا حلقه ای که زدی عجیبه
@ajdar9667
خب منم مشکلم همینه میگم بی حلقه گذاشتهب ودم نشد ، گفتم شاید حلقه بزنم همه رو بیاره بازم نشد هرچی میزنم این نشون نمیده
برا همین پیام دادم یکی ی توضیح بده 🙏
معلومه حلقه بی نهایته !اصن کارتون رو نمیفهمم الان قراره داخل شرطه while چی بشه ؟ اصلا حلقه نمخواد همین مقداری که گرفتی رو چاپ کن
@ajdar9667
متاسفانه چاپ نمیکنه موقعی که پیام دادم هم ذکر کردم که چاپ نمیشه
تو خروجی هم ب همون شکلی که کد مینویسم چاپ میشه به همون شکل کد🤕
ببینید اینطوری تو جدول چاپ میشه و ایدی اخرین مقاله هست برا بقیه مقاله ها هم همین ایدی چاپ میشه
سلام. چیزی که مشخصه شما دارید خود کوئری رو یعنی متغیر $sql
رو میفرستید برای فرانت!
باید نتیجه کوئریتون رو ارسال کنید.
حلقه هم نیاز ندارید.
الان سعی کنید عبارت داخل پرانتر رو بیرون بیارید ، حلقه رو حذف کنید و همون متغیر $row
رو ارسال کنید! قاعدتا یک ارایه تک عضوی هست که تعداد کامنت های مربوط به یک مقاله خاص( همونی که به عنوان $postid_db
توی شرط کوئری گذاشتید) رو برمیگردونه.
@SobhanDadkhah
اینم یادم رف بگم ، کامنتای هیچ پستی رو برنمیگردونه ، این چیزی ک برمیگردونه ایدی پست اخر هست که برا همه سطر جدولا یکی برمیگردونه
در اینصورت باید هم از کد های کوئری زدنتون که الان تغییر دادید رو قرار بدید هم کد های مربوط به نمایش فرانت اند تا بشه راهنمایی کرد.
یک نکته که الان به چشمم خورد حس میکنم کوئریتون چیزی برگشت نمیده.
$sql = "SELECT count(*) FROM comment WHERE id_post='$postid_db'";
$res = mysqli_query($connection,$sql);
$row = mysqli_fetch_assoc($res)
از متغیر row یک vardump بگیرید ببینید چیزی برمیگردونه؟
اینم یادم رف بگم ، کامنتای هیچ پستی رو برنمیگردونه ، این چیزی ک برمیگردونه ایدی پست اخر هست که برا همه سطر جدولا یکی برمیگردونه
بخاطر اینه که شما دارید فقط یک آیدی پست رو در کوئری لحاظ میکنید. برای اینکه تعداد کامنت های هر پست رو برگردونید یا باید برای تک تک پست ها یک کوئری مثل بالا بزنید یا با استفاده از join با یک کوئری تعداد کامنت هارو استخراج کنید.
شما با ویدیو و دوره ی اموزشی خاصی دارید پیش میرید؟
@SobhanDadkhah
من اموزشای زیادیی دیدم ولی تا حالا به این موردا برنخوردم ، یکی از دوستان قبلا پیشنهاد دادن شما sql بلد نیستین او نرو ببینید من اون دوره رو خریدم تمومش کردم ولی چیزی در این مورد ندیدم ،حتی درباره count توضیح دادن ها، ولی چیزی ک میخاستم اصلا نبود کلا در مورد ی چیز دیگ توضیح دادن ! من ای نروشی ک خودم رفتم قبلش بدون حلقه بود همه جا سرچ کردم همون بود دیدم نشد انداختم داخل حلقه ، خودم میدونم حلقه اشتباهه ولی گفتم شاید من اشتبا میکنم ولی دیگ کلا هیچی درس در نمیاد
با vardump هم گرفتم کلا null برمیگردونه
این از کد : id_post_article هم ستونی هست داخل جدول comment که وقتی کامنت گذاشته میشه ایدی اون پست رو اینجا ذخیره میکنم
$sql_post = "SELECT * FROM post";
$res_post = mysqli_query($connection, $sql_post);
while ($row_post = mysqli_fetch_assoc($res_post)) {
$postid_db = $row_post['id_post'];
}
$sql = "SELECT COUNT FROM comment WHERE id_post_article='$postid_db'";
$res = mysqli_query($connection, $sql);
$row = mysqli_fetch_assoc($res);
var_dump($row);
این هم داخل حلقه ای که همه چی رو سلکت کردم و اینم جزو اون حلقس ولی کدای بالا که براش تعریف کردم بالاتر از هم تعریف کردم
echo '<td>'.$row.'</td>';
باید برای count یک مقدار مشخص کنید. count(*).
اگر باز حل نشد سعی کنید دستی یک آیدی بدین:
$sql = "SELECT COUNT(*) FROM comment WHERE id_post_article=2";
ببینید چیزی برمیگرده از vardump
@SobhanDadkhah
الان این و برمیگردونه ولی ب صورت ارایه برمیگردونه و الان تعداد کامنت برا این پست دو عدد
'COUNT(*)' => string '2' (length=1)
ولی خطای ارایه میده
Notice: Array to string conversion
خاستم ارایاه رو تبدیل به همون مقدارم بکنم خطاش برطرف میشه ولی باز null برمیگردونه
خوب الان شما دارید کوئری صحیح میزنید و این مشکل اول حل شد. پس اون نحوه پاس دادن متغیرتون به کوئری اشتباهه در درجه اول منظورم اینجا هست:
$sql = "SELECT count(*) FROM comment WHERE id_post='$postid_db'";
// نیازی به تک کوتیشن ها نیست!
$sql = "SELECT count(*) FROM comment WHERE id_post=$postid_db";
مورد بعدی اینکه این مربوط به sql هست میتونید اسم ستون رو تغییر بدید. کوئری رو به این صورت بنویسید
$sql = "SELECT count(*) as tedad FROM comment WHERE id_post=$postid_db";
اینطوری از این به بعد داخل ارایه دریافتیتون کلید مقادیر tedad
هست و بصورت $row->tedad
بهش دسترسی دارید.
کلا هم باید دانش خوبی از SQL داشته باشید و هم PHP. خیلی چیزها به مرور زمان و تجربه ب دست میاد. اما پیشنهاد میکنم باز هم روی مطالب مرور کنید و به یک دوره خاص اکتفا نکنید.
امیدوارم که این مطالب مشکلتون حل کرده باشه. اگر هنوز مشکلی بود مطرح کنید
@SobhanDadkhah
خیلی ممنون کد شمارو قرار دادم دیدم نشد
بعد اینطوری نوشتم برا اون $row
$string_x = implode ($row);
و این رو string_x خروجی گرفتم عدد 2 رو چاپ کرد و as tedad رو هم برنداشتم ولی مشکلی ک هست برا همه مقاله ها 2 چاپ میکنه در حالی که دوتا مقاله هست و دوتا کامنت برا ی مقاله😑 وقاعا شرمنده سرتونم درد اوردم ممنون تا اینجا هم کمک کردین
@SobhanDadkhah
البته دلیلش هم مشخصه چرا برا همه تکرار میشه چون حلقه ای ک دارم پست هارو نمایش میدم این یکی هم داخل اون قرار داره اینطوری میشه ، جدا قرار میدم تکرار نمیکنه برا بقیه ولی خب جدول بهم میخوره
@SobhanDadkhah
اقا حلش کردم درس شد 😁
واقعا خیلی ممنونم مرسی که وقت گذاشتین خیلییی لطف کردین🌹
خواهش میکنم مشکلی نیست.
@zahramalekipor
برا همه مقاله ها ۲ چاپ میکنه
این بخاطر این هست که شما دارید آیدی رو بصورت دستی وارد میکنید. باید به ازای هر پستتون یک کوئری بزنید به دیتابیس . درواقع توی حلقه پست هاتون رو قرار میدید و به ازای هر ایتم که پست تکی هست یک کوئری میزنید و بجای اون عدد 2 آیدی همون پست رو قرار میدید. اما این مشکلی ب وجود میاره که به مشکل N+1 کوئری معروفه. یعنی شما یک کوئری میزنید که همه پست هارو دریافت کنید و به ازای هر پست یک کوئری دیگه میزنید. یعنی اگر روزی 100 پست داشته باشید 101 کوئری به دیتابیس زده میشه که اصلا بهینه نیست. (حتما راجع بهش سرچ کنید)
پیشنهادی که دارم اینه که علاوه بر طرح پرسش در راکت سعی کنید از طریق هر مقاله ای که دستتون میاد راجع به موضوعات مطالعه کنید. با هر سرچی که بزنید در گوگل بالاخره یک مقاله یا مثالی هست که بتونه کمکتون بکنه. خیلی مقالات متنوعی درباره ساخت وبلاگ با php هست که کلی میتونید از کد هاشون ایده بگیرید. مشخصا اول راه هستید و راه درازی در پیش دارید 😁 اما از مهم ترین راه های یادگیری خوندن کد های دیگه و یادگیری از اونهاست.
الان متوجه بقیه پیام هاتون شدم . خوشحالم که مشکلتون حل شده. اتفاقا خیلی چیزها واسه خودم هم مرور شد که از خوبی های شرکت کردن در بحث و گفتگو هست :))
راجع به مشکل N + 1 که بالا گفتم یک کوئری نوشتم که میتونید ازش ایده بگیرید. در واقع بجای اینکه لازم باشه برای هر پست تکی یک کوئری برای تعداد کامنت هاش اجرا کنید ، با join میتونید تعداد کامنت های مربوط به هر پست رو فقط با یک کوئری استخراج کنید که دیگه مشکل N + 1 وجود نخواهد داشت. در کنار زبان سطح بالاتون برای بک اند، حتما پیشنهاد میکنم کار با دیتابیس هارو هم خوب یاد بگیرید.
select posts.id, COUNT(comments.id) as commentsNumber from posts inner join comments on comments.post_id = posts.id GROUP by posts.id;
با ارزوی پیشرفت همیشگی :) موفق باشید 🤞🌹
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟