Yapamadığım bir sql sorgusu

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
medcail007
Üye
Mesajlar: 12
Kayıt: 06 Tem 2009 11:30

Yapamadığım bir sql sorgusu

Mesaj gönderen medcail007 »

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.
ikra
Üye
Mesajlar: 901
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Re: Yapamadığım bir sql sorgusu

Mesaj gönderen ikra »

kullanici sorguyu nasil veriyor.
kac tane kriter giriyor?
degerkod = 1, 2, 3 mü yoksa degerkod=1 gibi mi?

soruyu anlayabilirsem cevap vermeye calisacagim.
kıdemsiz üye
medcail007
Üye
Mesajlar: 12
Kayıt: 06 Tem 2009 11:30

Re: Yapamadığım bir sql sorgusu

Mesaj gönderen medcail007 »

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.
medcail007
Üye
Mesajlar: 12
Kayıt: 06 Tem 2009 11:30

Re: Yapamadığım bir sql sorgusu

Mesaj gönderen medcail007 »

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.
ikra
Üye
Mesajlar: 901
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Re: Yapamadığım bir sql sorgusu

Mesaj gönderen ikra »

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...
kıdemsiz üye
Kullanıcı avatarı
barutali
Üye
Mesajlar: 297
Kayıt: 02 Tem 2007 02:30

Re: Yapamadığım bir sql sorgusu

Mesaj gönderen barutali »

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 ..
medcail007
Üye
Mesajlar: 12
Kayıt: 06 Tem 2009 11:30

Re: Yapamadığım bir sql sorgusu

Mesaj gönderen medcail007 »

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. :(
Kullanıcı avatarı
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

Mesaj gönderen bulutsuzluk_35 »

ö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...

Kod: Tümünü seç

try
  try
    inc(Bilgi);
  except
    sabir;
  end;
finally
  inc(Mutluluk);
end;
Cevapla