PDA

View Full Version : سوال: چطوری دوتا حلقه در هم درست کنم ؟



mamali-mohammad
جمعه 11 آذر 1390, 13:44 عصر
سلام
من میخوام یه لیست اینطوری درست کنم :

a > b,c,d,e,f
g > l,k,q,e,w
p > j,o,x,z

حرف های a و g و p دسته اصلی هستن
حرف های دیگه زیر مجموعه
حالا من باید اول دسته هارو در حلقه بزارم و بعدش زیر دسته رو به ترتیبی که نشون دادم بکشم بیرون
چطوری این کارو انجام بدم ؟
این کدی که خودم نوشتم و جواب نداد :


$sql = mysql_query("SELECT * FROM `list` GROUP BY `category`");
while ($row=mysql_fetch_array($sql)){
$category=$row["category"];

$sql_sub=mysql_query("SELECT * FROM `list` WHERE `category`='$category'");
while ($row_sub=mysql_fetch_array($sql_sub)){
$sub=$row_sub["sub"];
echo $sub .=''.$sub.',';
}

$list .='<h1>'.$category.' > '.$sub.'</h1>';
}

امیـرحسین
جمعه 11 آذر 1390, 14:01 عصر
ترجیحا از اجرای کوئری در حلقه دوری کنید. در بدترین حالت از Prepared Statement استفاده کنید.
در هر صورت کار شما با روش زیر هم ممکن هست:

$select = mysql_query("SELECT * FROM `list` WHERE 1 ORDER BY category");
$categories = array();
while($row = mysql_fetch_assoc($select))
$categories[ $row['category'] ] = $row['sub'];
$select = null;

echo '<pre>';
print_r($categories);
/*
Array
(
[a] => Array
(
[0] => b
[1] => c
[2] => d
[3] => e
[4] => f
)

[g] => Array
(
[0] => h
[1] => i
[1] => j
[1] => k
)
....

)
*/
که الان اینجا من همه رو در یک آرایه ریختم شما میتونید در همون while چاپش کنید یا هر کار دیگه‌ای....

mamali-mohammad
جمعه 11 آذر 1390, 14:35 عصر
نفهمدیم چی شد
این اطلاعات ( دسته بندی و زیر دسته ها ) کم و زیاد میشن
باید قابلیت تعیین اتوماتیک داشته باشه

mamali-mohammad
جمعه 11 آذر 1390, 19:01 عصر
دوستان ؟
یه کمک کوچیک کنید
ممنون

mamali-mohammad
جمعه 11 آذر 1390, 21:23 عصر
دوستان
شدید گیرم ...

امیـرحسین
شنبه 12 آذر 1390, 12:21 عصر
نفهمدیم چی شد
این اطلاعات ( دسته بندی و زیر دسته ها ) کم و زیاد میشن
باید قابلیت تعیین اتوماتیک داشته باشه
کد من رو اجرا کن ببین چه خروجی‌ای میگیری...

mamali-mohammad
شنبه 12 آذر 1390, 14:38 عصر
ارور میده
میگه array() پیدا نمیشه

narsic
شنبه 12 آذر 1390, 22:22 عصر
با سلام
متن کامل خطا رو قرار بدهید
میتونید خط دوم رو هم حذف کنید
موفق باشید

mamali-mohammad
یک شنبه 13 آذر 1390, 12:23 عصر
میشه با همون حلقه ای که خودم نوشتم کد صحیحش رو بدید ؟

mamali-mohammad
شنبه 19 آذر 1390, 22:20 عصر
دوستان کمک می کنید ؟

MMSHFE
یک شنبه 20 آذر 1390, 09:51 صبح
میشه با همون حلقه ای که خودم نوشتم کد صحیحش رو بدید ؟
با سلام، من فرض رو بر این گذاشتم که شما Category شماره صفر رو برای دسته ریشه استفاده کردین. نگاهی به این کد بندازین. امیدوارم متوجه روش کار بشین و اون رو برحسب نیازتون تغییر بدین:


$sql = mysql_query('SELECT * FROM `list` WHERE (`category`=\'0\')');
while($row = mysql_fetch_assoc($sql)) {
echo '<h1>'.$row['text'].'</h1>'."\n";
$sql_sub = mysql_query("SELECT * FROM `list` WHERE (`category`='{$row['category']}')");
while($row_sub = mysql_fetch_assoc($sql_sub)) {
echo '<h2>'.$row_sub['text'].'</h2>'."\n";
}
}

موفق باشید.

mamali-mohammad
یک شنبه 20 آذر 1390, 12:19 عصر
ببینید در دیتابیس محتویات اینطوری ذخیره میشه ( ضمیمه شد )
حالا این محتویات تغییر می کنن ( اضافه یا کم میشه )
پس باید حتما با متغیر بنویسم که مشکلی درست نشه
کد صحیحش رو اگه محبت کنید ممنون میشم

MMSHFE
یک شنبه 20 آذر 1390, 12:29 عصر
آهان، الآن متوجه شدم. گویا شما روشی عکس روش معمول رو انتخاب کردین چون در روش رایج، هر گزینه خودش شماره والد رو مشخص میکنه اما در روش شما، والد، گزینه های فرعی خودش رو تعیین میکنه. در هر حال، این کد رو امتحان کنید:


$sql = mysql_query('SELECT DISTINCT `category` FROM `list` ORDER BY `category`');
while($row = mysql_fetch_assoc($sql)) {
echo '<h1>'.$row['category'].'</h1>'."\n";
$sql_sub = mysql_query("SELECT * FROM `list` WHERE (`category`='{$row['category']}') ORDER BY `sub`");
while($row_sub = mysql_fetch_assoc($sql_sub)) {
echo '<h2>'.$row_sub['sub'].'</h2>'."\n";
}
}

موفق باشید.

mamali-mohammad
یک شنبه 20 آذر 1390, 12:44 عصر
ممنون
اما مشکل اینجاست که برای نمایش این دوتا باید وابسته به هم باشن
یعنی هر دسته با زیر دسته هاشو یه جا چاپ کنه و زیر هم نباشه
مثلا اینطوری چاپ کنه :

Graphic > photoshop,flash,3dmax
Movie > serial,film

MMSHFE
یک شنبه 20 آذر 1390, 12:50 عصر
اِه! واقعاً؟ :چشمک: بفرمایید:


$sql = mysql_query('SELECT DISTINCT `category` FROM `list` ORDER BY `category`');
while($row = mysql_fetch_assoc($sql)) {
echo $row['category'].' > ';
$sql_sub = mysql_query("SELECT * FROM `list` WHERE (`category`='{$row['category']}') ORDER BY `sub`");
$sub = '';
while($row_sub = mysql_fetch_assoc($sql_sub)) {
$sub .= $row_sub['sub'].',';
}
$sub = substr($sub, 0, -1);
echo $sub.'<br/>'."\n";
}

اون substr رو برای حذف , انتهای رشته گذاشتم. موفق باشید.

mamali-mohammad
یک شنبه 20 آذر 1390, 13:00 عصر
ممنون
ردیف شد