نمایش نتایج 1 تا 10 از 10

نام تاپیک: نحوه select گرفتن از گروهبندی با تعداد بی نهایت

  1. #1
    کاربر دائمی آواتار az.heidarzadeh
    تاریخ عضویت
    اسفند 1388
    محل زندگی
    Iran-Mashhad
    پست
    241

    Question نحوه select گرفتن از گروهبندی با تعداد بی نهایت

    سلام
    من یک جدول برای گروه های کالاهام دارم که میتونه n تا زیرشاخه داشته باشه اینطوری
    بعد توی جدول کالاهام گروه هر کالا رو انتخاب میکنم اینطوری
    بعد یه view میسازم که هم کد هر گروه کالا رو داشته باشم هم کد parent اون کالا رو اینطوری
    حالا یه درخت ایجاد کردم از گروه هام اینطوری
    tree.png
    اما مشکل اینجاست که توی زیر شاخا های پایین تر ParentID رو از دست میدم و دیگه نمیتونم کالاهامو select کنم
    مثل شکل که من دوتا کالا توی ماوس دارم که زیر مجموعه کامپیوترن. 1 کالا توی lcd دارم که زیر مجموعه مانیتور و باز زیر مجموعه کامپیوتره و یکی هم توی led که اونم همینطوره
    الان وقتی روی مانیتور کلیک میکنم 2 تا کالا بهم میده چون parentID شون یکیه اما وقتی روی کامپوتر کلیک میکنم فقط 2 تا ماوس و میده و دیگه مانیتور ها رو نمیده که این وضعیت هر چقدر فرزندام بیشتر بشه ادامه داره
    اگه بخوام بدونم چندتا کالای کامپیوتر دارم چی؟
    یا شاید کلا تحلیلم مشکل داره آره؟
    ممنون میشم اگه لطفا راهنماییم کنید...

  2. #2

    نقل قول: نحوه select گرفتن از گروهبندی با تعداد بی نهایت

    سلام دوست من.
    برای دسترسی به تمام زیرمجموعه های یک درخت باید از حلقه استفاده کنید:
    declare @tbl as table(SN int) -- temp table
    insert into @tbl values(START_SN) -- seriale grouhe asli

    while @@rowcount > 0
    insert into @tbl
    select ID
    from GroupTBL
    where FatherID in (select * from @tbl) and not ID in (select * from @tbl) -- inserte hameye zir shakhe ha

    select * from @tbl join TBL on ... -- kala ha
    توابع تبدیل تاریخ با دقت 5000 سال
    پذیرش پروژه، کامپوننت، آموزش برنامه نویسی (دلفی، اس کیو ال، ..) -> 09123780840

    دوستای گلم حمایت کنید : https://cafebazaar.ir/app/com.nikanmehr.marmarxword/


    نرم افزار پخش مویرگی

  3. #3

    نقل قول: نحوه select گرفتن از گروهبندی با تعداد بی نهایت

    در صورت استفاده از SQL Server 2005 به بالا میتونید از روش زیر هم استفاده کنید
    Create Table #ObjectLevel (
    dcID int null,
    dcParentID int null,
    vcName nvarchar(50) null)

    Create Table #Objects (
    dcID int null,
    dcGroupID int null,
    vcModel nvarchar(50) null)

    Insert Into #ObjectLevel (dcID, dcParentID, vcName) Values (1, 0, N'کامپیوتر')
    Insert Into #ObjectLevel (dcID, dcParentID, vcName) Values (2, 1, N'کیبورد')
    Insert Into #ObjectLevel (dcID, dcParentID, vcName) Values (3, 1, N'ماوس')
    Insert Into #ObjectLevel (dcID, dcParentID, vcName) Values (4, 1, N'مانیتور')
    Insert Into #ObjectLevel (dcID, dcParentID, vcName) Values (5, 4, N'LCD')
    Insert Into #ObjectLevel (dcID, dcParentID, vcName) Values (6, 4, N'LED')

    Insert Into #Objects (dcID, dcGroupID, vcModel) Values (1, 3, N'Genius')
    Insert Into #Objects (dcID, dcGroupID, vcModel) Values (2, 3, N'Farassoo')
    Insert Into #Objects (dcID, dcGroupID, vcModel) Values (3, 5, N'Samsung 1955')
    Insert Into #Objects (dcID, dcGroupID, vcModel) Values (4, 6, N'Samsung 1965')

    Select
    O.dcID,
    O.dcGroupID,
    OL.vcName,
    O.vcModel
    From
    #Objects O INNER JOIN #ObjectLevel OL
    ON
    O.dcGroupID = OL.dcID


    Declare @LevelID int
    Set @LevelID = 1 -- Computer Level


    ;With ChildIDWithSource (ID) as
    (
    Select @LevelID as ID
    UNION ALL
    Select O.dcID as ID
    From
    #ObjectLevel O INNER JOIN ChildIDWithSource CIWS
    ON
    O.dcParentID = CIWS.ID
    )

    Select *
    From #Objects
    Where dcGroupID IN (Select ID from ChildIDWithSource)


    Drop Table #ObjectLevel
    Drop Table #Objects

    (از دستور With تا قبل از Drop کد مورد نظر شماست)

  4. #4
    کاربر دائمی آواتار az.heidarzadeh
    تاریخ عضویت
    اسفند 1388
    محل زندگی
    Iran-Mashhad
    پست
    241

    نقل قول: نحوه select گرفتن از گروهبندی با تعداد بی نهایت

    نقل قول نوشته شده توسط yousijoon مشاهده تاپیک
    سلام دوست من.
    برای دسترسی به تمام زیرمجموعه های یک درخت باید از حلقه استفاده کنید:
    declare @tbl as table(SN int) -- temp table
    insert into @tbl values(START_SN) -- seriale grouhe asli

    while @@rowcount > 0
    insert into @tbl
    select ID
    from GroupTBL
    where FatherID in (select * from @tbl) and not ID in (select * from @tbl) -- inserte hameye zir shakhe ha

    select * from @tbl join TBL on ... -- kala ha
    سلام
    ممنون بابت پاسختون اما اصلا ازش هیچی نفهمیدم، من واقعا sql خیلی خوب بلد نیستم، اگه لطف کنید و کد و کامل بزارید تا اجرا بشه ممنون میشم...

  5. #5

    نقل قول: نحوه select گرفتن از گروهبندی با تعداد بی نهایت

    دوست من اول سریال جایی که مد نظرتونه رو در جدول موقت می ریزیم.
    بعد تا وقتی که اون شاخه دارای زیر شاخه ای هست در جدول می ریزیم.
    آخر سر اونو با کالاهاش الحاق می کنیم.

    declare @tbl as table(SN int) -- temp table
    insert into @tbl values(START_SN) -- seriale grouhe asli

    while @@rowcount > 0
    insert into @tbl
    select dcID
    from GroupTBL
    where dcParentID in (select * from @tbl) and not dcID in (select * from @tbl) -- inserte hameye zir shakhe ha

    select * from @tbl join TBL on ... -- kala ha

    اسم جدول هاتونو جایگذاری کنید.
    توابع تبدیل تاریخ با دقت 5000 سال
    پذیرش پروژه، کامپوننت، آموزش برنامه نویسی (دلفی، اس کیو ال، ..) -> 09123780840

    دوستای گلم حمایت کنید : https://cafebazaar.ir/app/com.nikanmehr.marmarxword/


    نرم افزار پخش مویرگی

  6. #6
    کاربر دائمی آواتار az.heidarzadeh
    تاریخ عضویت
    اسفند 1388
    محل زندگی
    Iran-Mashhad
    پست
    241

    نقل قول: نحوه select گرفتن از گروهبندی با تعداد بی نهایت

    نقل قول نوشته شده توسط Reza_Yarahmadi مشاهده تاپیک
    در صورت استفاده از SQL Server 2005 به بالا میتونید از روش زیر هم استفاده کنید
    [SQL]
    واو، خیلی خیلی ممنون
    کد کاملا درست بود و من تونستم ازش استفاده کنم...

  7. #7

    نقل قول: نحوه select گرفتن از گروهبندی با تعداد بی نهایت

    اگر این پیاده سازی رو در یک جدول انجام داده باشید میشه اینطور نوشت :
    SELECT
    sr1.ID
    ,sr1.Title
    ,sr2.ParentID
    ,sr2.Title
    FROM SelfRelation as sr1 INNER JOIN SelfRelation as sr2 ON sr1.ID = sr2.ParentID

  8. #8

    نقل قول: نحوه select گرفتن از گروهبندی با تعداد بی نهایت

    مجتبی جان برای سطح دوم به بعد جواب نمی ده.
    توابع تبدیل تاریخ با دقت 5000 سال
    پذیرش پروژه، کامپوننت، آموزش برنامه نویسی (دلفی، اس کیو ال، ..) -> 09123780840

    دوستای گلم حمایت کنید : https://cafebazaar.ir/app/com.nikanmehr.marmarxword/


    نرم افزار پخش مویرگی

  9. #9

    نقل قول: نحوه select گرفتن از گروهبندی با تعداد بی نهایت

    نقل قول نوشته شده توسط yousijoon مشاهده تاپیک
    مجتبی جان برای سطح دوم به بعد جواب نمی ده.
    حواسم به این نبود که میخواد درخت تشکیل بده ؛ البته میشه همون Query رو توسعه داد برای سطح های بعدی ولی به دردسرش نمیارزه .

  10. #10

    نقل قول: نحوه select گرفتن از گروهبندی با تعداد بی نهایت

    نقل قول نوشته شده توسط Reza_Yarahmadi مشاهده تاپیک
    در صورت استفاده از SQL Server 2005 به بالا میتونید از روش زیر هم استفاده کنید
    Create Table #ObjectLevel (
    dcID int null,
    dcParentID int null,
    vcName nvarchar(50) null)

    Create Table #Objects (
    dcID int null,
    dcGroupID int null,
    vcModel nvarchar(50) null)

    Insert Into #ObjectLevel (dcID, dcParentID, vcName) Values (1, 0, N'کامپیوتر')
    Insert Into #ObjectLevel (dcID, dcParentID, vcName) Values (2, 1, N'کیبورد')
    Insert Into #ObjectLevel (dcID, dcParentID, vcName) Values (3, 1, N'ماوس')
    Insert Into #ObjectLevel (dcID, dcParentID, vcName) Values (4, 1, N'مانیتور')
    Insert Into #ObjectLevel (dcID, dcParentID, vcName) Values (5, 4, N'LCD')
    Insert Into #ObjectLevel (dcID, dcParentID, vcName) Values (6, 4, N'LED')

    Insert Into #Objects (dcID, dcGroupID, vcModel) Values (1, 3, N'Genius')
    Insert Into #Objects (dcID, dcGroupID, vcModel) Values (2, 3, N'Farassoo')
    Insert Into #Objects (dcID, dcGroupID, vcModel) Values (3, 5, N'Samsung 1955')
    Insert Into #Objects (dcID, dcGroupID, vcModel) Values (4, 6, N'Samsung 1965')

    Select
    O.dcID,
    O.dcGroupID,
    OL.vcName,
    O.vcModel
    From
    #Objects O INNER JOIN #ObjectLevel OL
    ON
    O.dcGroupID = OL.dcID


    Declare @LevelID int
    Set @LevelID = 1 -- Computer Level


    ;With ChildIDWithSource (ID) as
    (
    Select @LevelID as ID
    UNION ALL
    Select O.dcID as ID
    From
    #ObjectLevel O INNER JOIN ChildIDWithSource CIWS
    ON
    O.dcParentID = CIWS.ID
    )

    Select *
    From #Objects
    Where dcGroupID IN (Select ID from ChildIDWithSource)


    Drop Table #ObjectLevel
    Drop Table #Objects

    (از دستور With تا قبل از Drop کد مورد نظر شماست)
    سللام من این کد رو تبدیل یک پروسجر کردم حالا توی سی شارپ میتونم مقدار بازگشتی رو روی گرید ویو نمایش بدم . لطفا بگید چطوری میتونم به صورت صحیح روی یک treeView به صورتی درختی و نکته مهم اینکه هر دسته n تا زیر مجموعه داره و هر زیر مجموعه باز n تا زیر مجموعه داره و باز زیر مجموعه های اونها هم n تا زیر مجموعه داره یکنی بعضی کالا ها کاملا به صورت افقی به جلو اضافه میشه . کد فراخوانی رو قرار میدم لطفا راهنمایی کنید


    SqlConnection con = new SqlConnection(@"Data Source=.;Initial Catalog=test;Integrated Security=True");
    SqlCommand cmd = new SqlCommand();
    cmd.Connection = con;
    SqlDataAdapter da = new SqlDataAdapter(cmd);
    cmd.CommandType = CommandType.StoredProcedure;
    DataTable dt = new DataTable();

    con.Open();
    cmd.CommandText = "pros";
    da.Fill(dt);
    con.Close();
    dataGridView1.DataSource = dt;


قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •