Yapamadığım bir sql sorgusu
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
-
- Üye
- Mesajlar: 12
- Kayıt: 06 Tem 2009 11:30
Yapamadığım bir sql sorgusu
S.a. Arkadaşlar. Geçmiş bayramınız mübarek olsun. Bir türlü sorgulayamadığım bir durum var. Döngü vs. ile de yaptığım zaman çok yavaş oluyor ve sizlerden yardım talep ediyorum arkadaşlar. Tablodaki veriler aşağıdaki gibi.
INCKEY OZELLIKKOD DEGERKODU
1 01 03
1 02 02
1 03 05
2 01 03
2 02 02
2 03 06
3 01 04
3 03 08
3 02 01
3 03 04
Arkadaşlar tablodaki bilgiler bu şekilde. Burdaki kriter INCKEY no benim yapmak istediğim arama şu. OZELLIKKOD VE DEGERKOD alanlarındaki bilgileri kullanıcı giriyor. Benim kullanıcının girdiği bilgilerden
OZELLIKKOD VE DEGERKODU alanlarında arama yapmam lazım ama her inckeyde birden fazla satır var. Yani yapmak istediğim arama kullanıcının girdiği birden fazla satır bilgilerinin bu tablo içerisinde bire bir karşılayan var mı.
Yardımlarınızı bekilyorum arkadaşlar. Teşekkür ederim.
INCKEY OZELLIKKOD DEGERKODU
1 01 03
1 02 02
1 03 05
2 01 03
2 02 02
2 03 06
3 01 04
3 03 08
3 02 01
3 03 04
Arkadaşlar tablodaki bilgiler bu şekilde. Burdaki kriter INCKEY no benim yapmak istediğim arama şu. OZELLIKKOD VE DEGERKOD alanlarındaki bilgileri kullanıcı giriyor. Benim kullanıcının girdiği bilgilerden
OZELLIKKOD VE DEGERKODU alanlarında arama yapmam lazım ama her inckeyde birden fazla satır var. Yani yapmak istediğim arama kullanıcının girdiği birden fazla satır bilgilerinin bu tablo içerisinde bire bir karşılayan var mı.
Yardımlarınızı bekilyorum arkadaşlar. Teşekkür ederim.
Re: Yapamadığım bir sql sorgusu
kullanici sorguyu nasil veriyor.
kac tane kriter giriyor?
degerkod = 1, 2, 3 mü yoksa degerkod=1 gibi mi?
soruyu anlayabilirsem cevap vermeye calisacagim.
kac tane kriter giriyor?
degerkod = 1, 2, 3 mü yoksa degerkod=1 gibi mi?
soruyu anlayabilirsem cevap vermeye calisacagim.
kıdemsiz üye
-
- Üye
- Mesajlar: 12
- Kayıt: 06 Tem 2009 11:30
Re: Yapamadığım bir sql sorgusu
s.a. tekrar hocam. Kullanıcı sorgu oluşturmuyor hocam. Sırasıyla diyorki 01 özellik kodunun 03 değeri diyor ve bunları teker teker kayıt ediyor. Bu kayıt tamamlandıktan sonra başka bir ekrandan benim şunu diyebilmem lazım. kullanıcının girdiği kayıtlarla tutuşan bir özellik var mı yoksa mesela sıradan 112 özelliği oluşturup
112 01 03
112 03 03
112 04 04
gibi kayıt etmem gerekiyor. Umarım anlatabilmişimdir.
112 01 03
112 03 03
112 04 04
gibi kayıt etmem gerekiyor. Umarım anlatabilmişimdir.
-
- Üye
- Mesajlar: 12
- Kayıt: 06 Tem 2009 11:30
Re: Yapamadığım bir sql sorgusu
s.a. arkadaşlar ben soruyu biraz daha açayım. Muhtemelen tam anlaşılamadı. Aramam ve sql ile bulmam gereken bilgiler var ve bu bilgiler birden fazla satıra tekabül ediyor. Böyle olduğundan dolayı kullanıcının girdiği yukarıdaki gibi bilgiyi bir başka tablodaki verilerle uyuşan bilgiler var mı buna bakmam gereekiyor ama bunu yaparken inckeyno alanına göre bakmam yani her inckeyno için ayrı ayrı karşılaşması lazım ki çünkü birbirlerinde benzer özellikler olabilir ama benim tam olarak istediğim girilmiş olan örneğin 3 satırlık özelliğin bir inckeyno ya bağlı kayıtta tam olması. Döngü ile çok uzun sürüyor. fazla kayıt var ve yardımlarınızı bekliyorum.
Re: Yapamadığım bir sql sorgusu
ve aleyna aleykum selam...
eger ki sorgu her defasinda 3 kriterden olusuyor ise, bir Stored procedure yazarak üc kriteri parametre olarak gönderebilirsin,
ki server tarafindan bu islem yapilirsa daha hizli sonuc alirsin.
eger ki sorgu kriterleri X tane ise, yani her defasinda degisiyor ise, benim bildigim kadari ile döngüden baska sansin yok.
selam ve dua ile...
eger ki sorgu her defasinda 3 kriterden olusuyor ise, bir Stored procedure yazarak üc kriteri parametre olarak gönderebilirsin,
ki server tarafindan bu islem yapilirsa daha hizli sonuc alirsin.
eger ki sorgu kriterleri X tane ise, yani her defasinda degisiyor ise, benim bildigim kadari ile döngüden baska sansin yok.
selam ve dua ile...
kıdemsiz üye
Re: Yapamadığım bir sql sorgusu
soruyu yanlış anlamadıysam eğer INNERJOIN tam size göre ..
SELECT
Tablo1.*, Tablo2.*
FROM
Tablo1 INNER JOIN
Tablo2 ON Tablo1.INCKEY = Tablo2.INCKEY
iki tabloda da INCKEY leri kesişenleri size gösteriyor .. Cümleyi geliştirerek her 3 alan içinde kullanabilirsiniz ..
SELECT
Tablo1.*, Tablo2.*
FROM
Tablo1 INNER JOIN
Tablo2 ON Tablo1.INCKEY = Tablo2.INCKEY
iki tabloda da INCKEY leri kesişenleri size gösteriyor .. Cümleyi geliştirerek her 3 alan içinde kullanabilirsiniz ..
-
- Üye
- Mesajlar: 12
- Kayıt: 06 Tem 2009 11:30
Re: Yapamadığım bir sql sorgusu
s.a. dostum teşekkür ederim cevap verdiğin için ama burada inckeynolar kesişmiyor bilgilerin kesişmesi söz konusu yukarıdaki verdiğim bir master tablo var ve bu master tabloda
inckeyno ozellik degerkodu
1 01 02
1 03 03
1 04 05
2 01 02
2 03 03
2 04 06
Bu master tablo ve yarıdaki gibi yüzlerce girilen bilgi var. Şimdi bir kullanıcı olduğunuzu düşünün ve bir satırlık bir sipariş için özellik
- 01 degeri 02,
- 03 degeri 03
- 04 degeri 06
bu işlemi bir satırlık kayıt için benim siparişin özellikleri şöle olsun diye girdiğini düşünün.
Yukarıdaki master tabloda kayıtları ayrıştıran bir integer sayı. Benim şunu yapabilmem lazım Bu kullanıcının girdiği bilgileri içeren bir inckeyno ya bağlı kayıtlar var mı. Eğer tam olarak kullanıcının girdiği
bilgiyi içeren kayıt var ise yeni bir inckeynoya bağlı özellikler topluluğu kayıt etmeyeceğim ama kullanıcının girdiği bilgilerden bir tanesi bile farklı olursa yeni bir inckeyno ya bağlı özellikleri kaydedeceğim.
Yardımlarızı bekliyorum.
inckeyno ozellik degerkodu
1 01 02
1 03 03
1 04 05
2 01 02
2 03 03
2 04 06
Bu master tablo ve yarıdaki gibi yüzlerce girilen bilgi var. Şimdi bir kullanıcı olduğunuzu düşünün ve bir satırlık bir sipariş için özellik
- 01 degeri 02,
- 03 degeri 03
- 04 degeri 06
bu işlemi bir satırlık kayıt için benim siparişin özellikleri şöle olsun diye girdiğini düşünün.
Yukarıdaki master tabloda kayıtları ayrıştıran bir integer sayı. Benim şunu yapabilmem lazım Bu kullanıcının girdiği bilgileri içeren bir inckeyno ya bağlı kayıtlar var mı. Eğer tam olarak kullanıcının girdiği
bilgiyi içeren kayıt var ise yeni bir inckeynoya bağlı özellikler topluluğu kayıt etmeyeceğim ama kullanıcının girdiği bilgilerden bir tanesi bile farklı olursa yeni bir inckeyno ya bağlı özellikleri kaydedeceğim.
Yardımlarızı bekliyorum.

- bulutsuzluk_35
- Üye
- Mesajlar: 124
- Kayıt: 06 Eki 2007 04:14
- Konum: İzmir-Ankara-İstanbul-Antalya
- İletişim:
Re: Yapamadığım bir sql sorgusu
öncelikle şunu söylemeliyimki anladığım kadarıyla yukarda anlattığından bir anlamda senin paketlerin olmalı.VE sen master tablo dediğin alanda inckey uniq deil.Yukardaki tablo görünüş ve anlam itibari ile detail tablo.
bu gidiş ile hem tek bir sorguda işin zor döngüyle de dediğin gibi gereksiz vakit alır.
Benim tavsiyem
1.Ekranda kullanıcı kaydettiklerinden 1 tanesini seçip getirebilmeli.Değişikliği bunun üzerinde yapıp farklı bir biçimde tekrar kaydedebilmeli.
misal 3 nolu paketi getir
özellik field2
03 04
02 05
05 06
geldi bunlar değişiklik yapar yada yapmaz yapmak isterse kaydet diye bir buton koyarsın
master tablo şöyle olur
refno paketadi
1 1.paket
2 54.paket
3 45.paket
detail tablo ise
detrefno refno ozellik field4
1 1 01 03
2 1 02 03
3 1 03 06
4 2 02 05
5 2 03 45
gibi
dolayısıyla kullanıcı ekrana 1.paketi getir der ona bağlı özellikleri dökersin.
şimdi şey diyebilirsin.aynı paket birkaç defa tekrar edebilir farklı isimlerle ama bunuda bırak kullanıcılar kontrol etsin...
yada şimdi aklıma geldi dene olabilir ben denemedim ama olma ihtimali yüksek
select (ozellik+field4) as kelime from
detail
group by refno
oluşmasını tahmin ettiğim satırlar
010302030306
02050345
sonra senin ekrandan aldıklarını birleştir ve karşılaştır eşitlik var kayıt var demektir
yani
select * from
(select (ozellik+field4) as kelime from
detail
group by refno ) as temp
where temp.kelime=seninkelime
recno=1 ve yukarı ise kayıt var demektir.
Umarım yardımcı olabilmişimdir...
bu gidiş ile hem tek bir sorguda işin zor döngüyle de dediğin gibi gereksiz vakit alır.
Benim tavsiyem
1.Ekranda kullanıcı kaydettiklerinden 1 tanesini seçip getirebilmeli.Değişikliği bunun üzerinde yapıp farklı bir biçimde tekrar kaydedebilmeli.
misal 3 nolu paketi getir
özellik field2
03 04
02 05
05 06
geldi bunlar değişiklik yapar yada yapmaz yapmak isterse kaydet diye bir buton koyarsın
master tablo şöyle olur
refno paketadi
1 1.paket
2 54.paket
3 45.paket
detail tablo ise
detrefno refno ozellik field4
1 1 01 03
2 1 02 03
3 1 03 06
4 2 02 05
5 2 03 45
gibi
dolayısıyla kullanıcı ekrana 1.paketi getir der ona bağlı özellikleri dökersin.
şimdi şey diyebilirsin.aynı paket birkaç defa tekrar edebilir farklı isimlerle ama bunuda bırak kullanıcılar kontrol etsin...
yada şimdi aklıma geldi dene olabilir ben denemedim ama olma ihtimali yüksek
select (ozellik+field4) as kelime from
detail
group by refno
oluşmasını tahmin ettiğim satırlar
010302030306
02050345
sonra senin ekrandan aldıklarını birleştir ve karşılaştır eşitlik var kayıt var demektir
yani
select * from
(select (ozellik+field4) as kelime from
detail
group by refno ) as temp
where temp.kelime=seninkelime
recno=1 ve yukarı ise kayıt var demektir.
Umarım yardımcı olabilmişimdir...
Kod: Tümünü seç
try
try
inc(Bilgi);
except
sabir;
end;
finally
inc(Mutluluk);
end;