PDA

View Full Version : سوال: داده های تو در تو



Louai_M
پنج شنبه 23 مرداد 1393, 08:24 صبح
با سلام

من دو جدول دارم یکی بنام دسته بندی (section) و دیگری داده (data) دارم خوب در جدول اول از کاربر در بخش مدیریت نام دسته را وارد می کند مثلا دسته 1 ، دسته 2 و ... و در بخش بعدی برای هر دسته یک سری اطلاعاتی را وارد می کند.

حال می خواهم در صفحه ای اول دسته های را بخوانم که این را از طریق while فراخوانی کردم ولی مشکلم فراخوانی اطلاعات هر دسته و نمایش آنها جفت نام دستشون هست



دسته 1

اطلاعات 1 ، اطلاعات 2 ، اطلاعات 3



دسته 2

اطلاعات 1



دسته 3

اطلاعات 1، اطلاعات 2




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


دوستان چگونه می توان اینکار را انجام دادد.

[younes]
پنج شنبه 23 مرداد 1393, 08:38 صبح
در پایگاه داده؟ کدام یک؟

Louai_M
پنج شنبه 23 مرداد 1393, 08:50 صبح
منظورتان را نگرفتم چی هست

اگه منظورتون فراخوانی نه در صفحه php نه در پایگاه داده

[younes]
پنج شنبه 23 مرداد 1393, 09:22 صبح
باید از for تو در تو استفاده کنید و استفاده از آرایه دو بعدی

این به خوبی کار میکنه

kahe.mehrdad
پنج شنبه 23 مرداد 1393, 10:36 صبح
دوست من شما میتونید دو تا جدول را Join کنید (که من پیشنهاد نمیدم) ولی راه دیگری هست و اون اینه که شما اول یه query روی دسته ها بزنی. بعد داخل دستور foreach دوباره یه query دیگه روی اونیکی جدول بزنی به این صورت که هر دیتایی که والدش (دسته اش) برابر همین آیتم توی foreach هست را بریزه توی یه آرایه و نمایش بده.
شبه کدش اینشکلیه تقربا کار سختی نیست.


SectionQuery = Select from Section;
foreach( var item in SectionQuery)
{
echo item.name;
QueryOnDatas = select from Datas where Parent = item.id;
foreach( var DataItem in QueryOnDatas)
{
echo DataItem;
}
}

Louai_M
پنج شنبه 23 مرداد 1393, 19:21 عصر
با تشکر
دوست عزیز این با چه زبانی بود چون با php کار نکرد

kahe.mehrdad
پنج شنبه 23 مرداد 1393, 19:48 عصر
با تشکر
دوست عزیز این با چه زبانی بود چون با php کار نکرد
دوست من این شبه کد بود، من کد asp را گذاشتم کافیه شما به همین روال داده ها را بگیرید و به جای foreach از for استفاده کنید، راستش من php مسلط نیستم ولی این روش مطمئنا جواب خواهد داد

marys_farahani
پنج شنبه 23 مرداد 1393, 21:45 عصر
من متوجه سوال نشدم

مهرداد سیف زاده
پنج شنبه 23 مرداد 1393, 22:27 عصر
شما بین دسته و اطلاعات دسته باید کلید مشترک داشته باشید. مثلا id دسته رو باید در جدول اطلاعات دسته به عنوان cat_id ذخیره کنی. حالا یک فیلد مشترک بین هر دو داری که البته اگر بر حسب relation باشه بهتره. به هر حال با زدن کوئیری زیر میتونید دو تا جدول رو با هم join کنید و اطلاعات هر دو جدول رو بصورت یک جدول واحد در php بدست بیارید

select cat.id,cat.name,cat.parent from cat joine info on cat.id=info.cat_id;

Louai_M
پنج شنبه 23 مرداد 1393, 22:38 عصر
دوست عزیز مهرداد برای چیزی که من می خوام این روش کارساز نیست

من در جدول دسته (کد، نام)
در جدول داده (کد دسته، داده)

حال می خوام لیست دسته ها نشون داده بشه و جلوی اون هرچی داده با کدش ثبت شده نشون داده بشه


دسته 1
اطلاعات 1 ، اطلاعات 2 ، اطلاعات 3


دسته 2
اطلاعات 1


دسته 3
اطلاعات 1، اطلاعات 2

مهرداد سیف زاده
جمعه 24 مرداد 1393, 07:20 صبح
یعنی سیستم به صورت هوشمندانه تشخیص بده شما دو تا جدول برای ارتباط با همدیگه دارید؟
والا تا اونجایی که من علمم میکشه توی دیتابیس های رابطه ای مثل mysql و mssql همیشه برای ارتباط دو تا جدول کلید مشترک تعرف کرد
حالا شما بین جدول داده و جدول دسته باید یک کلیک و چیزی برای ارتباط اینها داشته باشید که بگید فلان رکورد از جدول داده مربوط هست با فلان رکورد از جدول دسته
اون sql رو هم که نوشتم یه نمونه مثال بود از روش کار و که باید joine بشه تا داده ها رو بصورت واحد داشته باشید

Unique
جمعه 24 مرداد 1393, 10:35 صبح
والا تا اونجایی که من علمم میکشه توی دیتابیس های رابطه ای مثل mysql و mssql همیشه برای ارتباط دو تا جدول کلید مشترک تعرف کرد
دوست عزیز ایشون توی جدول داده که کد دسته را داره !


دوستان جواب دادند و لی من با sqlite انجام دادم و جدول و کد را هم ضمیمه کردم :


$db = new SQLite3("test.db");
$stm = $db->prepare('select i_cat,i_name,c_name from _info inner join _cats on c_id = i_cat');
$results = $stm->execute();

$cur_cat = "";
echo "<table border='1'>";
$info = array();

while($row = $results->fetchArray()){
if ($cur_cat != $row['i_cat']){
if ($cur_cat != "")
echo implode($info," , ")."</td></tr>";

echo "<tr><td>{$row['c_name']}</td><td>";
$cur_cat = $row['i_cat'];
$info = array();
}
$info[] = $row['i_name'];
}
if (count($info) > 0)
echo implode($info," , ")."</td></tr>";

echo "</table>";
$stm->close();
$db->close();

Louai_M
جمعه 24 مرداد 1393, 12:30 عصر
مهرداد عزیز من همون طور که دوستمون گفتم کد دسته قرار دادم هم تو جدول دسته و هم تو جدول داده (کلید تعریف شده)