FilemakerTurk, AYS Bilişim ve Beyaz Net tarafından desteklenmektedir.
Filemaker Danışmanınız
AYS Bilişim
Mehmet KAYA
 0532 231 07 27
 0216 318 55 80
 mkaya@aysbilisim.net
						

ExecuteSQL icerisinde ALL kullanimi

+2 oy
373 kez görüntülendi

Degerli arkadaslar,

Bir program icerisinde belirli criterlere uyan kayitlari bulmam gerekiyor. id_product_attribute_requirement alani bir text alani ve 1 satir ID ler icermekte.
Su kayitlari aradigimda:
10000009_10000029_10000034
10000009_10000027_10000030
10000009_10000034_10000049
10000009_10000033_10000047


Normalde Enter Find mode ile
id_product_attribute_requirement = 10000009_10000029_10000034
New record request
id_product_attribute_requirement = 10000009_10000027_10000030
New record request
id_product_attribute_requirement = 10000009_10000034_10000049
New record request
id_product_attribute_requirement = 10000009_10000033_10000047

Perform Find seklinde bir arama gerceklestirdigimde arama yapabiliyorum. Ancak benim istedigim arama sonucu sadece bu 4 kombinasyonu buldugum zaman arama sonucunu gostermek istiyorum.

Bu sekilde bunu cozemedigim icin daha sonra ExecuteSQL ile bir cozum bulmaya calistim.

Oncelikle bunu AND ile denedim

......
WHERE id_product_attribute_requirement = ? AND id_product_attribute_requirement = ? AND id_product_attribute_requirement = ? AND id_product_attribute_requirement = ?

ama olmadi.

Global alan icerisindeki verilerim su sekilde.
keuze_lijst =
10000009_10000029_10000034
10000009_10000027_10000030
10000009_10000034_10000049
10000009_10000033_10000047

 

Daha sonra bunu WHERE id_product_attribute_requirement = ALL ( ) ile yapmayi denedim ama malesef buda olmadi. yada ben bunu tam olarak yapamadim. Yukaridaki keuze_lijst alani icerisindeki verileri su sekilde ALL fonksiyonu ile kullanmaya calistim.

 

Let ( [

//        id =  OFFERTEAANVRAAG::keuze_lijst;
          id =
"10000009_10000029_10000034" & ", " &
"10000009_10000027_10000030" & ", " &
"10000009_10000034_10000049" & ", " &
"10000009_10000033_10000047" ;

        oplage = OFFERTEAANVRAAG::oplage1;
         sql =
            ExecuteSQL (
                "
                SELECT id_leverancier FROM
                PRIJSLIJST P
                WHERE
                    id_product_attribute_requirement = ALL ( ? ) AND
                    ? BETWEEN P.c_min_oplage AND P.c_max_oplage
                ";
                    ""; "";
                    id ; oplage )
          ] ;

          sql

)

Ama malesef olmadi. Bu konuda ne onerebilirsiniz?

17, Nisan, 2017 SQL kategorisinde Hamit Özsönmez (56,370 puan) tarafından soruldu
Yanlış anlamadıysam, Çok basit bir yöntem ile sıkıntın çözülebilir.
Her aramadan belirli sayıda kayıt arıyorsun. Yukarıdaki aramada 4 farklı kriteri sorguluyorsun. Gelen sonuçta 4 kayıt olmalı.


Get (FoundCount)≠4 ise sonuç yanlıştır.  Get (FoundCount)=4 ise sonuç doğrudur.


Set Capture Error [ON]
Enter Find Mode (OFF)
Set Field
id_product_attribute_requirement = 10000009_10000029_10000034
New record request
Set Field
id_product_attribute_requirement = 10000009_10000027_10000030
New record request
Set Field
id_product_attribute_requirement = 10000009_10000034_10000049
New record request
Set Field
id_product_attribute_requirement = 10000009_10000033_10000047

PerformFind ()

İf (get (FoundCOunt)=4
ShowCustomDialog ( Aradığını tüm kriterler bulundu)
End if

ShowCustomDialog ( Aradığını tüm kriterler bulunamadı)
Show All Records.

Şeklinde ilerlene bilir.
hocam verdiginiz cevap icin tesekkurler, ancak bu sekilde bir arama her zaman dogru sonuca varmam icin yeterli degil.

Ornegin sizin bahsettiginiz gibi bir arama yaptigimda arama sonucum 4 olabilir ama bu 4 kayitta ilk arama kriterinden gelmis olabilir. bu yuzden dogru sonuc olmamali.

Konuyu biraz daha acacak olursam. Bu ID ler bir urunun ozelliklerini olusturmakta. Ve ben bu urunun siparisini verirken oncelikle Urunu seciyorum daha sonra ozelliklerini seciyorum. Sectigim ozelliklerin ID si yukarida belirttigim sekilde yer aliyor.

Daha sonra bu ozellikler listesini hangi saticidan alabilirim diye fiyat liste icerisinde arama yapiyorum. Fiyat listem icerisinde yukaridaki ID ler bir cok kez yer alabiliyor. Bunlari unik yapan adet + ID + satici ID si. Cunki ayni ozelliklerin bulundugu bir urunu farkli adetlerde farkli fiyata siparis edebiliyorum.

Veritabanimda sattigim hali hazir urunler yok. Her urunu mesela A4 bir kagiti farkli ozellikleri ile siparis edebilmem gerekiyor.

Ornegin A4 icin 4 ozellik sectim. bunlar yukaridaki ID sini verdigim ozellikler. arama yaptigimda bunu set halinde bulmam gerekiyor. Eger bu ozellikler tek tek arattigimda ilk arama ozelliginden 3, ikinciden 2, ucuncuden 4 ve dorduncu ozellikten 2 tane arama sonucu bulmam mumkun. cunki bu ozellikler farkli kombinasyonlarla fiyat listemde yer alabiliyor. Bu yuzden arama sonucum sadece ayni saticida set halindeki sonucu bana vermesi gerek.

Bu yuzden SQL query ile ALL yontemi ile butun bu ozelliklere sahip olan kayitlari cekmek istemistim.

Ikinci bir adim hangi saticida  bu urunu hangi fiyata alabilirim. ama bu daha sonraki bir problem :-)

1 cevap

+1 oy

Aramaları bulunan kümeyi genişletme yöntemi ile sırayla yaparak her iterasyonda found set artmış mı diye bakılabilir. Mesela şöyle bir script iş görebilir:

 

Perform Find [ 1. arama ]

Set Variable [ $KayıtSayısı ; Get(FoundCount) ]

 

Extend Found Set [ 2. arama ]

If ( Get(FoundCount) = $KayıtSayısı )

    Exit Script [ "Arama tüm istekleri sağlamadı!" ]

End If

Set Variable [ $KayıtSayısı ; Get(FoundCount) ]

 

Extend Found Set [ 3. arama ]

If ( Get(FoundCount) = $KayıtSayısı )

    Exit Script [ "Arama tüm istekleri sağlamadı!" ]

End If

Set Variable [ $KayıtSayısı ; Get(FoundCount) ]

 

Extend Found Set [ 4. arama ]

If ( Get(FoundCount) = $KayıtSayısı )

    Exit Script [ "Arama tüm istekleri sağlamadı!" ]

End If

 

 

 

 

17, Nisan, 2017 F. Osman Cabi (197,900 puan) tarafından cevaplandı
...