Ga naar inhoud
  • 0

Filemaker php AND en OR


dudematters

Vraag

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?

Link naar reactie

5 antwoorden op deze vraag

Aanbevolen berichten

  • 0

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

Link naar reactie
  • 0

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

Link naar reactie
  • 0

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.

Link naar reactie

Doe mee aan dit gesprek

Je kunt dit nu plaatsen en later registreren. Indien je reeds een account hebt, log dan nu in om het bericht te plaatsen met je account.

Gast
Beantwoord deze vraag...

×   Geplakt als verrijkte tekst.   Plak in plaats daarvan als platte tekst

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

×
×
  • Nieuwe aanmaken...