PDA

View Full Version : سوال: انتخاب از جدول دسته بندی با فیلد های id و parent_id



bluedream
دوشنبه 19 آبان 1393, 23:34 عصر
سلام..
یک جدول دسته بندی دارم که id و parent_id داره، داخل فرم افزودن محصول قراره از بین دسته بندی انجام شده یک مورد انتخاب بشه..
چه جوری اطلاعات رو از بانک بخونم و بیارم که فقط child ها نمایش داده بشه ؟
مثلا: id= 100, parent_id=0 نرم افزار
id= 200, parent_id=0 سخت افزار
id= 101, parent_id=100 ویندوز
id= 201, parent_id=200 هارددیسک می خوام داخل منو فقط ویندوز و هارددیسک بیاد و از بین این دو انتخاب انجام بشه..
لطفا راهنمایی کنید.. ممنون

bluedream
سه شنبه 20 آبان 1393, 11:39 صبح
کسی نیست راهنمایی کنه؟! :(

captain_hamid
سه شنبه 20 آبان 1393, 11:42 صبح
تو کوئری قسمت شرط اینو بگذارید
where parent_id <> 0

bluedream
سه شنبه 20 آبان 1393, 11:47 صبح
آخه عمق جدول بیشتر از این حرفاست.. خیلی از parent_id ها مقدارشون صفر نیست..

captain_hamid
سه شنبه 20 آبان 1393, 11:49 صبح
چند سطحی؟
یعنی یک فیلد که یک بچه داره باز بچه هم میتونه بچه داشته باشه؟
منظورتون از عمق همین چند سطحی بودنشونه؟


Parent_id
Name
Id


0

نرم افزار
100


0
سخت افزار
200


100

ویندوز
101


200

هارددیسک
201


201
هارد sata
202


شما الان این جدول رو دارین. الان سطری مثل سطر با id 202 دارین؟ که خودش بچه، بچه یکی دیگس؟

bluedream
سه شنبه 20 آبان 1393, 12:13 عصر
این فقط یک مثال بود.. بله دقیقا شما در نظر بگیرین که یک child داریم که parent_id برابر با 202 داره!

bagherok
سه شنبه 20 آبان 1393, 17:27 عصر
آخه عمق جدول بیشتر از این حرفاست.. خیلی از parent_id ها مقدارشون صفر نیست..
خوب تا چه عمقی رو!!!


این فقط یک مثال بود.. بله دقیقا شما در نظر بگیرین که یک child داریم که parent_id برابر با 202 داره!
با مثال که نمیشه جواب داد!!!
جدول ورودی و خروجی رو مثل بالا ترسیم کنید تا بهتر بشه راهنمایی کرد
یا دقیق تر توضیح بدید.

bluedream
سه شنبه 20 آبان 1393, 19:27 عصر
id

name

Parent_id



100

وسایل دیجیتالی

0



200

کتاب و رسانه

0



101

موبایل

100



102

تبلت

100



103

لپ تاپ

100



201

کتاب

200



202

فیلم

200



20101

شعر و ادبیات

201



20102

روانشناسی

201



20103

زبان

201



20201

اکشن

202



20202

کمدی

202



20203

جنایی

202

bagherok
سه شنبه 20 آبان 1393, 20:16 عصر
id
name
Parent_id


100
وسایل دیجیتالی
0


200
کتاب و رسانه
0


101
موبایل
100


102
تبلت
100


103
لپ تاپ
100


201
کتاب
200


202
فیلم
200


20101
شعر و ادبیات
201


20102
روانشناسی
201


20103
زبان
201


20201
اکشن
202


20202
کمدی
202


20203
جنایی
202




اگه جدول شما به همین صورت و حداکثر 2و 3 سطحی باشه یعنی
کتاب و رسانه-> کتاب->زبان
وسایل دیجیتالی->موبایل

خب الان خروجی مورد نظر شما از این جدول چیه
همه چی رو به غیر اونایی که فیلد parent_id
0 باشه!

http://sqlfiddle.com/#!2/562a4/12


select level1.name from category as level1
where level1.parent_id is not null





موبایل
کتاب
روانشناسی
زبان


و یا آخرین child ها


http://sqlfiddle.com/#!2/562a4/15


select level1.name as level1
from category as level1
left outer
join category as level2
on level2.parent_id = level1.id
where level1.parent_id is not null AND level2.id is null




موبایل
روانشناسی
زبان

bluedream
سه شنبه 20 آبان 1393, 22:45 عصر
مرسی :)
خیلی لطف کردین..