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

نام تاپیک: تولید یک لیست Related( موضوعات مرتبط) و مرتب کردن آن با order by????

  1. #1

    تولید یک لیست Related( موضوعات مرتبط) و مرتب کردن آن با order by????

    با سلام

    یک جدول داریم که توی آن آهنگ های مختلف رجیستر شد- اینها ستونهای من هستند

    ID
    PersonName
    StyleMusic
    LaguageMusice

    خوب همانطور که می بیند یک آهنگ می تواند صفتهای
    نام خواننده آهنگ
    سبک آهنگ (راک - جاز - سنتی - کلاسیک)
    زبان ( فارسی - اسپانیایی - آلمانی - انگلیسی)

    خوب حالا می خواهم وقتی که یک موسیقی در حال پخش است حدود 12 از موسیقی های مرتبط با آن موسیقی را لیست کنم و بگذارم پایین قسمت پخش)
    روش آسان است می توانم در کوئری خودم در قسمت where از عملگر or استفاده کنم

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

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

    مثلا
    اگر هر سه شرط تساوی را داشت در ابتدای لیست بیاید

    و اگر مثلا دو شرط تساوی را داشت بعد آن و

    و اگر مثلا یک شرط تساوی را داشت آخر همه بیاید.



    منظورم هم اینکه بعضی ها چون شرطهای بیشتر ی دارند خوب بیشتر مرتبط هستند پس باید در بالای لیست بیایند
    البته این مثلا هایی که می گویم مثال هست - و شاید روش بهتری برای مرتب سازی در اینگونه موارد باشه. یا حتی بتوانیم به بعضی از شرط ها امتیاز بیشتری بدهیم.



    اگر توضیحاتم کامل نیست بگویید تا بیشتر توضیح بدهم
    با تشکر از اساتید محترم
    آخرین ویرایش به وسیله khadem1386 : دوشنبه 17 بهمن 1390 در 11:27 صبح

  2. #2

    نقل قول: تولید یک لیست Related( موضوعات مرتبط) و مرتب کردن آن با order by????

    سلام

    ممکنه روشهای زیادی برای اینکار باشه ...

    اما روش ساده ایی که به ذهن من می رسه اینه که شما 3 تا Select بنویس بعد نتیجه هارو با هم Union کن ... بعد تو Select اول یه ستون ثابت با مقدار 1 ایجاد کن ... تو دومی این ستون رو مقدار 2 بده ... و به همین ترتیب بعد اینها رو با هم Union کن و بر اساس اون فیلد ثابت Order by کن ...

  3. #3

    نقل قول: تولید یک لیست Related( موضوعات مرتبط) و مرتب کردن آن با order by????

    البته ... تو Select اول 3 تا شرط رو بنویس ... تو دومی 2 تا شرط (که البته حالت ها مختلف با هم Or می شوند) ... و تو سومی 1 شرط ...

  4. #4

    Question نقل قول: تولید یک لیست Related( موضوعات مرتبط) و مرتب کردن آن با order by????

    با سلام به آقای بکتاش: متشکرم از توجه شما

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

    سناریوی من همین الان هم خیلی ساده نیست به عنوان مثال چون ممکن بوده که یک خواننده چندتا آهنگ را خوانده باشه طبیعتا دوتا tabel دارم یکی برای لیست افراد و یکی برای لیست آهنگها و خوب دستور همین الان من هم یک دستور select است که از join استفاده کردم و همین الان هم دستور select من خیلی طولانی شده. و حتی مجبورم نام تمام ستونهای مورد نیازم را هم با نام table مورد نظر اضافه کنم و کلی داستان دار join کردن دیگه

    از طرفی آنچیزی که شما می گوید هم کار من را، یا بعبارت بهتر حجم querystring من را اقلا چهار برابر می کنه. احساس خوبی برای cpu و کلا منابع سرور data-Base ندارم یک جیزی توی وجدام سنگینی می کنه و می گه بامرام پس اصل performance چی می شه ؟ یا بهم می گه این چه جور Normalize کردنه؟ آخرین باری که با وجدانم درگیر شدم برگشت بهم گفت پایگاه داده رو ورلکن برو تو استادیوم بوق بزن. از اون موقه تا بحال هم دیگه باهاش قهرم. این بود که من و وجدانم فکرهامون رو روی هم ریختیم و گفتم بیام یک میحیط مجازی تخصصی که خوراک شون query با مرغ است و خلاصه تلیت می کنند مسله رو توش. :)

    این مثلا یک select یک لایه هست تازه


    Select art.ID_ART, art.nameArt,art.image, art.flv, art.mp3 ,art.ID_person,art.Style, art.Lahje, art.makan_tolid,
    art.zaman_tolid, art.comment, person.ID_person, person.name, person.family from art INNER JOIN
    person on art.ID_person = person.ID_person

    where( art.Style= '" & word1 &"' or person.ID_person = " & word2 & " or art.Lahje = '" & (word3") &"' ) and art.ID_ART <>" & "ArtID")

    Order by person.ID_person desc





    مرسی از توجه همه دوستان و آقای بکتاش
    آخرین ویرایش به وسیله khadem1386 : دوشنبه 17 بهمن 1390 در 18:20 عصر

  5. #5

    نقل قول: تولید یک لیست Related( موضوعات مرتبط) و مرتب کردن آن با order by????

    خواهش می کنم قربان ...

    در مورد حجم Query ها که مشکلش با sp حل می شه ... در خصوص اینکه Query هاتون الانم خیلی پیچیدست بهتره view و sp براشون درست کنی ( و حتی از Synonym استفاده کنی) که قابل فهمتر بشه ...

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

    اما در مورد سئوالت ... یه نگاهی به Full Text Search بندازی بدی نیست ... من زیاد کار نکردم باهاش ...

  6. #6
    کاربر دائمی
    تاریخ عضویت
    شهریور 1389
    محل زندگی
    تهران
    سن
    60
    پست
    293

    نقل قول: تولید یک لیست Related( موضوعات مرتبط) و مرتب کردن آن با order by????

    سلام،

    این جواب میده؟

    if object_id( 'dbo.MusicByKhadem' ) is not null
    drop table dbo.MusicByKhadem;
    go

    create table dbo.MusicByKhadem
    (
    ID int identity(1,1) primary key,
    PersonName nvarchar(100) not null,
    StyleMusic nvarchar(100) not null,
    LanguageMusic nvarchar(100) not null
    );
    go

    insert dbo.MusicByKhadem (PersonName, StyleMusic, LanguageMusic) values ('None', 'None', 'None');
    insert dbo.MusicByKhadem (PersonName, StyleMusic, LanguageMusic) values ('DJ Khandem', 'None', 'None');
    insert dbo.MusicByKhadem (PersonName, StyleMusic, LanguageMusic) values ('None', 'Classical Metal', 'None');
    insert dbo.MusicByKhadem (PersonName, StyleMusic, LanguageMusic) values ('DJ Khandem', 'Classical Metal', 'None');
    insert dbo.MusicByKhadem (PersonName, StyleMusic, LanguageMusic) values ('None', 'None', 'Bolivian Lori');
    insert dbo.MusicByKhadem (PersonName, StyleMusic, LanguageMusic) values ('DJ Khandem', 'None', 'Bolivian Lori');
    insert dbo.MusicByKhadem (PersonName, StyleMusic, LanguageMusic) values ('None', 'Classical Metal', 'Bolivian Lori');
    insert dbo.MusicByKhadem (PersonName, StyleMusic, LanguageMusic) values ('DJ Khandem', 'Classical Metal', 'Bolivian Lori');


    declare @person nvarchar(100) = 'DJ Khandem';
    declare @style nvarchar(100) = 'Classical Metal';
    declare @language nvarchar(100) = 'Bolivian Lori';

    select top 12
    x.PersonMatch + x.StyleMatch + x.LanguageMatch as Score,
    x.*
    from
    (
    select
    k.*,
    case when k.PersonName = @person then 1 else 0 end as PersonMatch,
    case when k.StyleMusic = @style then 1 else 0 end as StyleMatch,
    case when k.LanguageMusic = @language then 1 else 0 end as LanguageMatch
    from
    dbo.MusicByKhadem k
    where
    k.PersonName = @person
    or k.StyleMusic = @style
    or k.LanguageMusic = @language
    ) x
    order by
    Score desc;


برچسب های این تاپیک

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

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