PDA

View Full Version : مشکل در حلقه ی تو در تو php



ali abedian
پنج شنبه 28 فروردین 1393, 15:05 عصر
ساخت اساسی گروه و زیرگروه و نمایش همه ی گروهها و زیرگروهاشون در یک صفحه (mysql + php) در طراحی یکcms
سلام دوستان هنرمند php کار
.............................................

نام مربی ها: مربی ۱ ، مربی ۲، مربی ۳، مربی ۴، و ...
نام دانشجو: دانشجو۱، دانشجو۲، دانشجو۳، دانشجو۴، دانشجو۵، دانشجو۶، و ...

هر مربی در زیرمجموعه ی خودش تعدادی دانشجو داره و هر دانشجو در زیرمجموعه ی یک یا چند مربی قرار میگیره
طبق شکل زیر دو تا جدول هم برای هر کدوم جدا ایجاد کردم که رکوردهاشون مشخصه

::به صورت زیر::

118091

کدهایی هم که تا اینجا استفاده کردم به اینصورت هستن ( البته کدها با مثالی که زدم یکی نیستن و عبارتها چیز دیگه ای هستن - ببخشید)


mysql_select_db($database_connection, $connection);$query_groups_list = "SELECT * FROM groups";$groups_list = mysql_query($query_groups_list, $connection) or die(mysql_error());$row_groups_list = mysql_fetch_assoc($groups_list);$totalRows_groups_ list = mysql_num_rows($groups_list);


mysql_select_db($database_connection, $connection);$query_subgroups = "SELECT * FROM subgroups WHERE maingroup_id = '3'";$subgroups = mysql_query($query_subgroups, $connection) or die(mysql_error());$row_subgroups = mysql_fetch_assoc($subgroups);$totalRows_subgroups = mysql_num_rows($subgroups);


اینم از بخشی که حلقه ی تو در تو استفاده کردم



<div class="main"> <?php do { ?> <?phpmysql_query("SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'");?> <div class="group"> <div class="group_header"> <div class="group_icon"><img src="groups/icons/gicon<?php echo $row_groups_list['maingroup_id']; ?>.png"></div> <div class="group_title"><?php echo $row_groups_list['maingroup_name']; ?></div> </div> <div class="group_catelist"> <ul> <?php while ($row_subgroups = mysql_fetch_assoc($subgroups)) { ;?>
<li><a href="groups/cateview.php?gcode=1&amp;cat=1&amp;catname=شکلات"><?php echo $row_subgroups['subg_title']; ?></a> </li> <?php } ; ?> </ul> </div> </div> <?php } while ($row_groups_list = mysql_fetch_assoc($groups_list)); ?> </div><!--/main-->



البته تعداد گروههایی که ایجاد شدن از جدول مربی ها، به درستی در حلقه ی اول بازیابی میشه و نمایش داده میشه و همونطور که در شکل درسمت راست نشون دادم به این صورت نمایش داده میشه ولی مشکلی که هست اینه که در زیر مموعه ی مربی ۲ و مربی ۳ و الی آخر، هیچی دیده نمیشه و در عوض همه ی دانشجوها در زیرمجموعه ی مربی ۱ نمایش داده میشن..
البته اونجایی که در کوئری دوم من maingroup_id رو برابر ۳ قرار دادم، طبیعتاً هر چی از جدول دوم که مربی ش ۳ باشه نمایش داده خواهد شد و این اتفاق میافته و درست هم کار میکنه ولی نمیدونم چرا این حلقه برای مربی ۲ و مربی ۳ درست کار نمیکنه؟!

فعلا اینقدر رو مطالعه کنید و پاسخ بدین تا در ادامه در خدمت باشم
ممنونم و منتظرم

ali abedian
شنبه 30 فروردین 1393, 16:59 عصر
جواب نداره؟

ali abedian
جمعه 05 اردیبهشت 1393, 10:23 صبح
:ناراحت:واقعا کسی نمیتونه به این سوال سخت پاسخ بده؟ خیلی متاسفم که سطح علمی این انجمن پایین هست

Unique
جمعه 05 اردیبهشت 1393, 13:57 عصر
مشکل شما اینه که سوال را به خوبی مطرح نمیکنی و بجای اینکه بگی مشکلت چیه ،‌ تفصیل بی مورد میدی !

اگه می خوای فرمت نمایشی که گفتی را داشته باشی و هر دانشجو زیر نظر مربی های متفاتی باشه ، اصلا جداولت را درست پیاده سازی نکردی ! مشکل شما قبل از کد نویسی همون جداول هستند. شرمنده وقت نمیکنم بشینم پایگاه داده آموزش بدم ولی باید حتمی مطالعات بیشتری انجام بدی !

شما نیاز به سه جدول داری ،‌اینطوری :

Table : morabian
m_id,m_name

Table : daneshjoo
d_id,d_name

Table : mrb_dsh
md_id,md_morabi,md_daneshjoo

توضیح : این جدول از FKEY هیا دو جدول دیگه هستش.

برای نمایش هم نیاز به query توی حلقه نیست ، اینطوری :


select m_name,d_name from mrb_dsh left join morabian on md_morabi = m_id left join daneshjoo on md_daneshoo = d_id order by m_name,d_name


$m_name = "";
foreach($rows as $row){
if ($row['m_name'] != $m_name){
if ($m_name != "")
echo "</div>";

$m_name = $row['m_name'];
echo "<div>";
echo "<div>$m_name</div>";
}
echo "<div>{$row['d_name']}</div>";
}
echo "</div>"; // latest div need to be closed !



واقعا کسی نمیتونه به این سوال سخت پاسخ بده؟ خیلی متاسفم که سطح علمی این انجمن پایین هست

تا اونجا که من حقیر میدونم ، بهترین انجمن برنامه نویسان ایران اینجاست.

marys_farahani
جمعه 05 اردیبهشت 1393, 17:08 عصر
به قول دستمون مشکلتون اول بگید بعد شرح بدید حقیقتش من نگاه نکردم:چشمک:

tux-world
جمعه 05 اردیبهشت 1393, 22:16 عصر
من که درست نفهمیدم چی میخاد. اومده با بی ادبی تمام هم بار علمی انجمن رو زیر سوال برده. عجب هااااااا. درست پرسیدن سریع ترین راه رسیدن به جوابه

Unique
شنبه 06 اردیبهشت 1393, 00:22 صبح
جوابی که دادم خدمتشون ، خروجی مورد نظرشون را تامین میکنه. اما مشکل اینه که چرا زود قضاوت میکنیم ؟!

ali abedian
شنبه 06 اردیبهشت 1393, 12:07 عصر
مشکل شما اینه که سوال را به خوبی مطرح نمیکنی و بجای اینکه بگی مشکلت چیه ،‌ تفصیل بی مورد میدی !

سوالو به این خوبی مطرح کردم ولی خب دقت شما کافی نبود.. به هر حال ممنون که برای بنده ی حقیر اینقدر وقت گذاشتین و پاسخ دادین، منو شرمنده ی خودتون کردید..




من که درست نفهمیدم چی میخاد. اومده با بی ادبی تمام هم بار علمی انجمن رو زیر سوال برده. عجب هااااااا. درست پرسیدن سریع ترین راه رسیدن به جوابه

به این یکی هم باید بگم که اینکه شما درست نمیفهمی، حق نداری با بی ادبی ، منو تحقیر کنی! به هر حال خدا رو شکر، من یاد گرفتم که، از هر کسی به اندازه ی درک و شعورش توقع داشته باشم و از شما هم توقعم بیشتر از این نبوده! به هر حال برای رسیدن به درجات بالاتر باید هر بی ادبی ای رو از هر بی ادبی تحمل کرد..


در مورد پاسخی که اون دوست عزیز دادن هم بسیار ازشون متشکرم ، انشاء الله از راهنمایی شون استفاده میکنم و اگر به مشکلی برخوردم در همین بخش مطرح میکنم تا از راهنمایی اهالی این انجمن بهره مند بشم..
انشاء الله بتونم علممو در این زمینه اونقدری افزایش بدم که محتاج دیگران نشم که اینطور تحقیرم کنن..

Unique
شنبه 06 اردیبهشت 1393, 14:29 عصر
انشاء الله بتونم علممو در این زمینه اونقدری افزایش بدم که محتاج دیگران نشم که اینطور تحقیرم کنن

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

موفق و پیروز و سعادتمند باشین

ali abedian
یک شنبه 07 اردیبهشت 1393, 12:24 عصر
ساخت اساسی گروه و زیرگروه و نمایش همه ی گروهها و زیرگروهاشون در یک صفحه (mysql + php) در طراحی یکcms

سلام با کدهای شما نتونستم کاری کنم و نتیجه ی دلخواه رو نمیگرفتم (شاید اشکال از کار من بوده) به هر حال ..
از روش زیر استفاده کردم و تا حدودی نتیجه گرفتم ولی مشکلی پیش اومده:

روش:
استفاده از دو کوئری به صورت زیر
118389
و استفاده از این کدها درون تگ body
118390

نتیجه کار هم به این صورت شده:
118391

یه توضیحی هم بدم در مورد مطالبی که گذاشتم تا شما دوباره دادتون در نیاد!!
در اون مثالی که از پست اول براتون گذاشتم عبارتهای مربی و دانشجو رو بکار بردم .. ولی این کدهایی که در همین پست براتون گذاشتم، به جای مربی از group و به جای دانشجو از subgroup استفاده کردم.. برای اینکه گیج نشین ، دوباره جداول و مقادیرشون رو به صورت تصویر در ادامه نشونتون میدم به این صورت:

جدول group و مقادیر درج شده در آن:
118392

جدول subgroup و مقادیر درج شده در آن:
118393

این از این... امیدوارم مفهوم بوده باشه.. انشاء الله


ولی سوالمو دوباره مطرح میکنم:
من میخوام طبق عکس شماره ۳ (از بالا) گروهها نمایش داده بشن و زیرگروه های مربوط به اونها هم نمایش داده بشن.. هنوز توی مخم نرفته این قضیه و این باعث شده من از کار و زندگی بیافتم و چند روزیه که در گیر این شدم .. خواهش میکنم یه جواب درست بدید تا مشکلم حل شه ..
اصلا فکر کنید یک کار تیمی بوده و منم توی این بخش گیر کردم :لبخند: و از کار و زندگیم هم افتادم و به بقیه ی قسمتهای نتونستم برسم (منظورم در پروژه ای هست که دارم رووش کار میکنم) :ناراحت:

خواهشاً آدرس ندید برم اونور و این ور .. اینقدر اینور و اونور رفتم که بازم اونطوری که دلم میخواست ، به نتیجه نرسیدم .. نمیدونم شاید اصرارم بر اینه که حتما با همین دو تا کوئری کارو تموم کنم.. شاید اصرار الکی هست! به هر حال دیگه .. دارم یه سی ام اس مینویسم برای سایتهای خودم .. بقیه ی بخشهاش خیلی خوب و روان بود ولی این بخش شاخه و زیر شاخه و نمایش همه ی شاخه ها و زیر شاخه ها در یک صفحه بطور همزمان منو گیج کرده .. ممنون میشم کمکم کنید
یا علی!

ali abedian
یک شنبه 07 اردیبهشت 1393, 12:35 عصر
البته از آموزشهای این کتاب الکترونیکی SQL (از ضمیمه ی همین پست دانلود کنید به درد دوستان تازه کار میخوره، به نظرم خیلی میتونه مفید باشه براتون) هم استفاده کردم ولی دیگه مخم هنگ کرده و جواب نمیده .. واقعا خدا رو خوش نمیاد به خاطر در جا زدن در این بخش (که به نظرم مهمه چون میشه تعمیم ش داد به خیلی بخشهای دیگه در یک سی ام اس نویسی جانانه) از کل کار اصلی م عقب بیافتم .. البته فشار اقتصادی حاکم بر سر مبارکمو هم در نظر بگیرید و اینکه با داشتن قسط و اجاره خونه و خرج ماهیانه و هزار تای دیگه ، بازم خیلی خوبه که در این سن و سال دنبال این چیزها میرم... یه یاری بدید ، انشاء الله از شرمندگی شما در میام دوستان

Unique
دوشنبه 08 اردیبهشت 1393, 00:43 صبح
سلام با کدهای شما نتونستم کاری کنم و نتیجه ی دلخواه رو نمیگرفتم
نتیجه دلخواه یعنی چی ؟ نتیجه دلخواه شما غیر از اون عکسی هست که توی پست شماره ۱ گذاشتین ؟ اگه نتیجه دلخواه همونه ! من کد را چک کردم و دقیقا همین عکس را میشه ازش خروجی گرفت. اگه خواستین وقت میگذارم تا متوجه بشین درست وقت نگذاشتین و خودتون را درگیر موضوعات دیگه کردین.

اگه شما فقط یک مرحله زیر گروه داشته باشین برای نمایش خیلی خیلی راحت میشه از کدی که گذاشتم استفاده کرد اما اگه یک tree داشته باشین باید از توابع بازگشتی استفاده کنین برای راحت ترین حالت که البته روش های دیگه ای هم هست و نیاز به اشاره و توضیح در این مطلب نداره و برای پیمایش سریعتر tree هستش.


من query و کد را مطابق جدول شما ویرایش کردم ،‌ این را تست کنین قطعا جواب میده :


select t1.sg_title,t2.g_title from subgroup t1 left join group t2 on t1.g_id = t2.g_id order by t2.g_title,t1.sg_title


$g_title = "";
echo "<ul>";
foreach($rows as $row){
if ($row['g_title'] != $g_title){
if ($g_title != "")
echo "</ul></li>";

$g_title = $row['g_title'];
echo "<li>$g_title<ul>";
}
echo "<li>{$row['sg_title']}</li>";
}
echo "</ul></li>"; // latest div need to be closed !
echo "</ul>";

ali abedian
دوشنبه 08 اردیبهشت 1393, 11:32 صبح
ممنون از شما ولی کدهای اچ تی ام ال شما ایراد داره .. منظور تگ ها رو درست استفاده نکردید که حالا این مهم نیست ..
ولی اون نتیجه ای که شما میگید نمیده ها !!!!! من تعجب میکنم شما چطور از این کدها نتیجه گرفتید..
البته از کوئری شما خیلی بهره بردم و ممنونم .. یه مقداری تغییر دادم مناسب با جدولم




mysql_select_db($database_connect, $connect);
$query_query = "SELECT * FROM subgroup c1 LEFT JOIN agroup c2 ON (c2.g_id = c1.g_id) ORDER BY c1.g_id ASC";
$query = mysql_query($query_query, $connect) or die(mysql_error());
$row_query = mysql_fetch_assoc($query);
$totalRows_query = mysql_num_rows($query);



نتیجه کوئری اینه:



Array ( [sg_id] => 6 [sg_title] => sub6 [sg_info] => infosub6 [g_id] => 1 [g_title] => title1 [g_info] => info1 )
Array ( [sg_id] => 9 [sg_title] => sub9 [sg_info] => infosub9 [g_id] => 1 [g_title] => title1 [g_info] => info1 )
Array ( [sg_id] => 10 [sg_title] => sub10 [sg_info] => infosub10 [g_id] => 2 [g_title] => title2 [g_info] => info2 )
Array ( [sg_id] => 1 [sg_title] => sub1 [sg_info] => infosub1 [g_id] => 3 [g_title] => title3 [g_info] => info3 )
Array ( [sg_id] => 2 [sg_title] => sub2 [sg_info] => infosub2 [g_id] => 3 [g_title] => title3 [g_info] => info3 )
Array ( [sg_id] => 11 [sg_title] => sub11 [sg_info] => infosub11 [g_id] => 4 [g_title] => title4 [g_info] => info4 )
Array ( [sg_id] => 12 [sg_title] => sub12 [sg_info] => infosub12 [g_id] => 4 [g_title] => title4 [g_info] => info4 )
Array ( [sg_id] => 4 [sg_title] => sub4 [sg_info] => infosub4 [g_id] => 5 [g_title] => title5 [g_info] => info5 )
Array ( [sg_id] => 7 [sg_title] => sub7 [sg_info] => infosub7 [g_id] => 5 [g_title] => title5 [g_info] => info5 )
Array ( [sg_id] => 8 [sg_title] => sub8 [sg_info] => infosub8 [g_id] => 5 [g_title] => title5 [g_info] => info5 )
Array ( [sg_id] => 3 [sg_title] => sub3 [sg_info] => infosub3 [g_id] => 6 [g_title] => tilte6 [g_info] => info6 )




ولی اون foreach ای که شما استفاده میکنی جواب نمیده..
البته من کدها رو تا اینجا اصلاح کردم به شکل زیر:


<?php
$g_title = "";
echo '<ul>';
foreach($row_query as $row){
if ($row_query['g_title'] != $g_title){
echo '<h3>' . $row_query['g_title'] . '</h3>';
}
echo '<li>' . $row_query['sg_title'] . '</li>';
}
echo '</ul>';
?>

Unique
دوشنبه 08 اردیبهشت 1393, 17:58 عصر
چی بگم !؟ بهتره عملی انجام بدم.

این نتیجه :
118441

فایل های database و script را ضمیمه کردم.

ali abedian
دوشنبه 08 اردیبهشت 1393, 23:52 عصر
بسیار عالی ، خدا رفتگانتو بیامرزه.. متشکرم :تشویق::تشویق::تشویق:
فقط دو تا سوال و یه خواهش:

:متفکر:اول اینکه این روشی که شما استفاده کردی تا چقدر اصولی و اساسی هست؟ آخه به خاطر این مشکل خیلی گشتم توی اینترنت و متوجه شدم که این موضوع خیلی با اهمیت بوده و مقالات مختلفی براش نوشته شده و بحثهای سنگینی هم شده که از درک مخ هنگیده ی من خارج بود.. برای همینه که میپرسم که این راه اصولی هست که ما از این به بعد در بخشهای مختلف ازش بهره ببریم؟

:متفکر:دوم اینکه سرعت لود اطلاعات در این روش کم نیست؟ میشه برای مقادیر زیادی از گروه ها و زیرگروه ها ازش استفاده کرد؟


:بامزه:خواهش میکنم که تا اینجاشو زحمت کشیدین که! حالا بزرگواری کنید و خط به خط بشکافید که چه اتفاقی افتاده تا به درد همه ی دوستان بخوره..




متشکر از وقتی که برای بنده و دیگر دوستان مشتاق در این انجمن گذاشتین.. خدا عوض خیر بده بهتون انشاء الله

Unique
چهارشنبه 10 اردیبهشت 1393, 01:07 صبح
اول اینکه این روشی که شما استفاده کردی تا چقدر اصولی و اساسی هست؟
ببینین. کلا به این ساختار ها tree یا همون درخت میگن ! مثل ساختار فولدر ها و فایل های سیستم و ...
مثال شما دو سطح داشت و اگه همین دو سطح باشه روش من جواب میده و اصلا نیاز به کار دیگه ای نیست. اما اگه تعداد سطح ها یا همون شاخه ها بیش از یکی بشه و ادامه پیدا کنه ، در واقع با مبحث Tree traversal یا پیمایش درخت روبرو میشیم که روش های زیادی داره و باید با اونها آشنا بشین. اما فکر نکنم شما منظورتوت درخت بوده باشه و خواستین یکسری sub را زیر چند تا گروه وابسته بچینین که همین کد به راحتی جواب میده.


اینکه سرعت لود اطلاعات در این روش کم نیست؟
اگه زیر گروه ها زیر گروه دیگه ای نداشته باشن و ما مفهوم درخت نداشته باشیم و فقط یک سطح باشه این کد با سرعت خیلی خوب جواب میده.


تا اینجاشو زحمت کشیدین که! حالا بزرگواری کنید و خط به خط بشکافید که چه اتفاقی افتاده تا به درد همه ی دوستان بخوره
به شدت کد ساده ای هستش. شما بگین کجاش مشکل دارین تا توضیح بدم.

ali abedian
پنج شنبه 11 اردیبهشت 1393, 05:51 صبح
ممنون از توضیحاتون..
> البته توی این مرحله که دارم کار میکنم، در همین سطح گروه و زیرگروه هست ولی در کل نیاز به این شاخه شاخه شدن های چند سطحی در آینده وجود داره..
> در ضمن کدهای شما واضحه مشکلی نداره.. به طور کلی گفتم که شماها که کارتون اینه و حوصله شو دارین، حالا که این کدها رو در این مبحث قرار دادین، توضیح تکمیلی ش هم بذارید که دیگران استفاده کنن و مثل من اینقدر اینور و اونور نگردن ..

... در آخر هم باید بگم که ممنون میشم در مورد این درختی که میگین هم بیشتر صحبت کنید.. و یه چند تا آدرس بدید که درست و اساسی توضیح بدن .. البته در مورد اینی که گفتی شما! من یه چند تا لینک پیدا کردم ولی خیلی سنگین بود و مطالبش زیاد بود و حوصله نکردم وقت بذارم رووش و فکر کنم در موردش..
یکی بیاد یه مقاله درست و حسابی در مورد این مبحث بنویسه خیلی خوب میشه... چون ظاهرا خیلی بحث مهمی هست توی این برنامه نویسی
ممنون میشم
یا علی