Veritabanı dersi için sql db kullandığımız bir web sitesi hazırlamamız gerekiyor. Hazırladığımız site spotify gibi müzik dinleme portalı, şuanda localde çalışıyor ve 8 tane tablosu var. Şarkı filitreleme sorgularını oluştururken bir yerde takıldım. Düşündüğümüz filitre sayfasında tür, yıl, ülke, şarkının uzunluğu gibi değerler kullanıcıdan istenecek ve çıkan sonuçlar sayfaya yazdırılacak rneğin kullanıcı puanı 4 den fazla 2001 yılından sonra çıkan uzunluğu 3 dk dan uzun elektronik müzik türündeki parçaları isterse aşağıdaki sorgu çalışacak select from . left join . on . . = . . left join . on . = . Where . . >'3:00' And . . >2001 And Score > 4 And . = 'Electronic' And . =0 And . = 'ENGLISH' And . = 'USA' Order by . Ancak bizim istediğimiz duruma pek uymuyor. Şyleki eğer kullanıcı tür blümüne bir değer girmezse, boş bırakırsa, tüm türlerin bastırılmasını istiyoruz. Yani yukardaki taslağın sabit kaldığını düşünelim WHERE . =ALL gibi birşey yapamıyoruz. Her durum için ayrı ayrı sorgu oluşturmakda çok uzun sürüyor. Bu tür durumlarda sizin yaptığınız çzüm nedir yada ne nerirsiniz? hocam eğer tür blümüne değer girilmesse şu sql çalışsın girilirse şu sql çalışsın diye yapabilirsin bence rnek if request. form ="" then sql else sql end if

Stored Procedure kullanma şansınız varsa http://programmers.stackexchange.com/questions/160031/best-method-to-implement-a-filtered-search adresindeki çzümü deneyebilirsiniz. ... ya da... http://stackoverflow.com/questions/11329823/add-where-clauses-to-sql-dynamically-programmatically adresinde nerildiği gibi WHERE 1=1 ile birlikte diğer koşulları kullanabilirsiniz. Tabi sql sorgusunu dinamik de oluşturabilirsiniz. rneğin is_filter1_set YeniHarman tarafından 02/May/15 23:31 tarihinde düzenlenmiştir Olaylara karışmayın!

hocam tasarım kısmı nasıl onu bilmediğim için net bişey diyemiyorum ama şyle birşey yapabilirsin nce query0 diye bir string tanımladığını varsayalım birinci kısım için if tur <> "" then if query0="" then query0 = "tur = " & tur. txt else query0 = and "tur = " & tur. txt end if end if şeklinde devam ederek where blümünü komple string olarak yazdırıp sonra sql cümleciğinde where blümünden sonra query0 stringini yazdırarak sorgunu çekebilirsin Kasnak yuvarlandı elek oldu, eski orospular melek oldu...

Veritabanı dersi için sql db kullandığımız bir web sitesi hazırlamamız gerekiyor. Hazırladığımız site spotify gibi müzik dinleme portalı, şuanda localde çalışıyor ve 8 tane tablosu var. Şarkı filitreleme sorgularını oluştururken bir yerde takıldım. Düşündüğümüz filitre sayfasında tür, yıl, ülke, şarkının uzunluğu gibi değerler kullanıcıdan istenecek ve çıkan sonuçlar sayfaya yazdırılacak rneğin kullanıcı puanı 4 den fazla 2001 yılından sonra çıkan uzunluğu 3 dk dan uzun elektronik müzik türündeki parçaları isterse aşağıdaki sorgu çalışacak select from . left join . on . . = . . left join . on . = . Where . . >'3:00' And . . >2001 And Score > 4 And . = 'Electronic' And . =0 And . = 'ENGLISH' And . = 'USA' Order by . Ancak bizim istediğimiz duruma pek uymuyor. Şyleki eğer kullanıcı tür blümüne bir değer girmezse, boş bırakırsa, tüm türlerin bastırılmasını istiyoruz. Yani yukardaki taslağın sabit kaldığını düşünelim WHERE . =ALL gibi birşey yapamıyoruz. Her durum için ayrı ayrı sorgu oluşturmakda çok uzun sürüyor. Bu tür durumlarda sizin yaptığınız çzüm nedir yada ne nerirsiniz? https://i. imgur.com/lCgZ0V0. jpg

Geç cevap verdiğim için kusura bakmayın yeni vakit buldum devlerden. Verdiğiniz cevapar için teşekkür ederim. Sizin ynlendirdiğiniz şekilde tasarladık sorguları. Filitre kısmında ilk olarak tüm query değişkenlerine "1=1" olarak atadık daha sonra if else ile boş olup olmadıklarını kontrol ettik. Eğer kulanıcı o query için bir değer girerse, misal süresi 2 dk dan uzun şeklinde, o querye >user. duration atadık. son sorgumuz da bu şekilde oldu. SELECT . as AlbumName, . as ArtistName, . as GenreName, . from left join on . = . left join on . = . Where + query1+" And "+ query2+" And" +query3 Ana arama kutusuna da LIKE konutuyla sorgu ekledik. select from . Where . . Like '%ey%' --icinde ey barindiran Sarkilar select from . Where . . Like '%es%' --icinde es barindiran albumler select from . Where . . Like '%ri%' --icinde ri barindiran artistler Yardımlarınız için teşekkürler https://i. imgur.com/lCgZ0V0. jpg

Eğer arama yaptıracaksan bence LIKE komutunu kullanman daha uygun olur puan = Request. QueryString yil = Request. QueryString uzunluk = Request. QueryString tur = Request. QueryString if puan = "" or yil = "" or uzunluk = "" or tur = "" then ' hepsi dahil sql = "SELECT FROM songs ORDER BY id DESC" ' hepsi dahil sonu else ' müzik seçimi sql = "SELECT FROM songs" ' müzik seçimi sonu ' puan seçimi if then sql = sql & " " end if ' puan seçimi sonu ' yil seçimi if then sql = sql & " " end if ' yil seçimi sonu ' uzunluk seçimi if then sql = sql & " " end if ' uzunluk seçimi sonu ' tur seçimi if then sql = sql & " " end if ' tur seçim sonu ' Sıralama sql = sql & " ORDER BY songs. id Desc" ' sıralama sonu end if Mali tarafından 03/May/15 19:39 tarihinde düzenlenmiştir Akilli olanlar sebepler konusunda tartışırlar. Ama nihai kararı sonuçta sürekli aptallar verir...!

hocam tasarım kısmı nasıl onu bilmediğim için net bişey diyemiyorum ama şyle birşey yapabilirsin nce query0 diye bir string tanımladığını varsayalım birinci kısım için if tur <> "" then if query0="" then query0 = "tur = " & tur. txt else query0 = and "tur = " & tur. txt end if end if şeklinde devam ederek where blümünü komple string olarak yazdırıp sonra sql cümleciğinde where blümünden sonra query0 stringini yazdırarak sorgunu çekebilirsin En mantıklı yol bu uzun sql satiri yazmaya gerek yok