Jump to content
  • 0

Filemaker php AND en OR


dudematters

Question

Posted

Ik heb op een filemaker php pagina een zoekveld staan. Alles wat in dit veld gezocht kan worden moet gevonden worden in alle records van die klant;

 

Klantnummer (ID) = 100

 

In het zoekveld kan gezocht worden op alle records van die klant, bijvoorbeeld op een naam, adres of telefoonnummer in 1 veld. Ik heb mijn FM Php code ingericht dat ik kan zoeken op deze velden, dat werkt. Daarvoor gebruik ik de functie

setLogicalOperator(FILEMAKER_FIND_OR)

om op de combinatie van verschillende velden te zoeken.

 

Maar nu moet ik een AND en OR combinatie hebben, het zoeken moet op ID (100) AND de zoekreeks die de klant heeft waar een OR geld op de verschillende velden. Dus na een beetje zoeken wilde ik het Compound Find command gebruiken, om de twee zoekopdrachten te combineren.

 

	$request1 = $fm->newFindCommand($layoutName);
	$request1->addFindCriterion('ID', $search);

	$request2 = $fm->newFindCommand($layoutName);
	$request2->setLogicalOperator(FILEMAKER_FIND_OR);
	$request2->addFindCriterion('VolledigeNaam', $search);

	$compoundFind = $fm->newCompoundFindCommand($layoutName);
	$compoundFind->add(1, $request1);
	$compoundFind->add(2, $request2); 
	$compoundFind->addSortRule('ID', 1, FILEMAKER_SORT_DESCEND);
	$result = $compoundFind->execute();		

 

Zoals je ziet is in $request2->setLogicalOperator(FILEMAKER_FIND_OR); de OR meegenomen. Als ik nu een zoekopdracht doe gaat dit enorm traag, het lijkt erop dat het een onmogelijk request is. Heeft iemand een tip om in Filemaker php een AND en OR in een zoekopdracht te combineren?

5 answers to this question

Recommended Posts

  • 0
Posted

Dag Felix,

 

Nee, dat is allemaal wel goed, als ik de tweede zoekopdracht doe, met de OR, even de combinatie met het klantnummer vergeet, werkt alles naar behoren, ik kan zoeken op alle velden die ik wil en vind die ook. Zodra ik de AND erbij zet gaat het fout. En ik moet de AND erbij hebben zodat klanten alleen hun data zien, niet alle data in de tabellen (wat nu dus kan)....

  • 0
Posted

Ik heb (helaas) geen verstand van PHP, maar is dit niet iets wat je beter in de privilegeset kunt oplossen?

 

Je laat een klant inloggen neem ik aan, en dan wordt ergens (via de login naam) het klantnummer opgehaald.

Je kunt dan in de privilegeset per tabel aangeven dat iemand alleen records mag zien waarvan het klantnummer gelijk is aan het 'login-klantnummer'.

 

Dat werkt altijd, ook met PHP neem ik aan.

 

Hans Erik

  • 0
Posted

Gebruik van FILEMAKER_FIND_OR is hier overbodig,

 

Als je wil zoeken op:

   ( ID = 100  en VolledigeNaam = "Jan Klaas" )
of 
   ( ID = 100 en telefoonnummer = "Jan Klaas" )

 

 

 

 


     $search_ID = 100;
     $search =  "Jan Klaas";

Voorbeeld 1:
  $compoundRequest = $fm->newCompoundFindCommand($layoutName);
  $request1 = $fm->newFindRequest($layoutName);
  $request2 = $fm->newFindRequest($layoutName);

  $request1->addFindCriterion('ID', $search_ID);
  $request1->addFindCriterion('VolledigeNaam', $search);

  $request2->addFindCriterion('ID', $search_ID);
  $request2->addFindCriterion('telefoonnummer', $search);     

  $compoundFind->add(1, $request1);
  $compoundFind->add(2, $request2); 
   //$compoundRequest->addSortRule('ID', 1, FILEMAKER_SORT_DESCEND);
  $result = $compoundFind->execute();    


Voorbeeld 2:
  $compoundRequest = $fm->newCompoundFindCommand($layoutName);
  $request1 = $fm->newFindRequest($layoutName);
  $request2 = $fm->newFindRequest($layoutName);
  $request3 = $fm->newFindRequest($layoutName);

  $request1->addFindCriterion('ID', $search);
  $request1->addFindCriterion('VolledigeNaam', $search);

  $request2->addFindCriterion('ID', $search);
  $request2->addFindCriterion('telefoonnummer', $search);     

  $request3->addFindCriterion('ID', $search);
  $request3->addFindCriterion('adres', $search);     

  $compoundFind->add(1, $request1);
  $compoundFind->add(2, $request2); 
  $compoundFind->add(3, $request3); 
  //$compoundRequest->addSortRule('ID', 1, FILEMAKER_SORT_DESCEND);
  $result = $compoundFind->execute();  

 

 

$compoundRequest->addSortRule('ID', 1, FILEMAKER_SORT_DESCEND); laat ik hier weg immers sorteren op ID 100 heeft geen effect.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...