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
						

iki tablo için tek findcommand kullanma

0 oy
346 kez görüntülendi
Selam arkadaşlar. İki tablo var booking ve tour. bilgi çekmem gerekiyor. aşağıdaki gibi her komuttan iki tane yaptım çok sağlıklı görünmüyor bunu iki tablo kullanma durumunda kodu nasıl daha basit yazabiliriz yani tek findcommand kullanabiliriz? örnek verirmisiniz? teşekürler.

$findCommand1 = $fm->newFindCommand("Tours");
$findCommand1->addFindCriterion("_kfdTourDate", $date);
$findCommand2 = $fm->newFindCommand("Booking");
$findCommand2->addFindCriterion("_kpnID", "$id");
$result1 = $findCommand1->execute();
$result2 = $findCommand2->execute();
$records1 = $result1->getRecords();
foreach ($records1 as $record1)
.............
........
11, Ocak, 2017 PHP kategorisinde johnny (2,840 puan) tarafından soruldu
12, Ocak, 2017 johnny tarafından düzenlendi

1 cevap

+1 oy
 
En İyi Cevap

FileMaker CWP (Custom Web Publishing - Özel Web Yayını) ile yapılan sorgularda mantık diğer veritabanlarından (php+mysql, asp+mssql vb) biraz farklı.

 

Öncelikle sorgu yaparken kesinlikle bir yerleşim (layout) üzerinden yapıyoruz. Webden yapacağımız sorgu için kullanacağımız yerleşim (layout);

1. sorgu sonucunda döndürülecek verileri (alanları) berlilememize,

2. bu yerleşim için seçilen tablo görünümündeki (table occurance) ilişkili tabloları kullanma imkanı sunuyor.

 

"SELECT a.Alan1, a.Alan2, b.Alan1 WHERE Tablo1 a Join Tablo2 b ... şeklinde devam eden bir sorgusundaki seçilen alanları ve ilişkileri seçtiğimiz yerleşim üzerinden belirlemiş oluyoruz.

 

FileMaker'ın CWP ile geliştirme yaparken hazırladığımız sayfada göstermek / sorgulamak istediğimiz alanları içeren yeni bir yerleşim kullanmamız da fayda var. Alanları seçerken yerleşim bağlı olduğu ana tablodan (current table) alan yerleştirebileceğimiz gibi ilişkili alanları, portalları da bu yerleşimde kullanabiliriz.

 

Sizin örneğinize gelirsek, Tours ve Booking tabloları bir şekilde birbiri ile ilişkili olduğunu varsayalım (soruda tablolar hakkında bilgi verilmediği için tahminlerle gidiyoruz..)

Web için hazırladığımız yerleşim (adı WebLayout_TourListView olsun), Tour tablosundan veri çekiyor ve ilgili Book'inglerle ilişkili olduğunu varsayalım. Sorgu için PHP kodumuz şu şekilde olabilir;

 

$findCommand1 = $fm->newFindCommand("WebLayout_TourListView");
$findCommand1->addFindCriterion("_kfdTourDate", $date);
$findCommand1->addFindCriterion("Bookings::_kpnID", "$id");
$result1 = $findCommand1->execute();
$records1 = $result1->getRecords();
foreach ($records1 as $record1) ...

 

Yerleşimimiz Tours tablosunu kaynak olarak gördüğü için sorgu içinde Bookings tablosundan alan kullanacağımızda ilişki adını (bu örnekte Bookings:: şeklinde) belirtmemiz gerekiyor.

 

Aslında mantık normal filemaker kullanımıza benziyor;

- Önce arama yapacağımız yerleşime geçiyoruz. (1. satır)

- Arama kriterlerimizi giriyoruz (2 ve 3. satırlar)

- Enter'a basıp aramayı çalıştırıyoruz (4. satır)

Arama sonucu geliyor. Buraya kadar oldukça benzer, web tarafında farklı olan sonucun array/object olarak gelmesi ve php kabiliyetleri ile işleniyor olması.

13, Ocak, 2017 F. Osman Cabi (197,920 puan) tarafından cevaplandı
14, Ocak, 2017 johnny tarafından seçilmiş
Osman hocam "SELECT a.Alan1, a.Alan2, b.Alan1 WHERE Tablo1 a Join Tablo2 b  nereye yazmamız gerekiyor php de çalışmadı.
...