Beispiel Verknüpfung

Aus Limbas Wiki

Wechseln zu: Navigation, Suche

<-- zurück zu Admin-Dokumentation / <-- zurück zur Hauptseite


Die folgenden Beispiele sollen zeigen, wie der erweiterte Filter für Verknüpfungen anzuwenden ist.

Ohne erweiterten Filter werden dem Benutzer, wenn er eine Verknüpfung zu einem bestehenden Datensatz einer anderen Tabelle erstellen will, alle Datensätze dieser Tabelle als Vorschlag aufgelistet. Der erweiterte Filter bietet die Möglichkeit, Bedingungen zu setzen, die von einem Datensatz erfüllt sein müssen, damit er als Vorschlag für die Verknüpfung gezeigt wird.

In den folgenden Beispielen soll ein Datensatz der Tabelle "PATIENTEN" mit einem Datensatz der Tabelle "GERICHTE" verknüpft werden:

Erweiterter Filter durch Setzen der den SQL-Klauseln entsprechenden Variablen "$where[]" und "$from[]"

verfügbare Filter:

  • $select
  • $from
  • $where
  • $join
  • $order
Example: 1:
$where[] = "GERICHTE.NAME LIKE '%suppe%'";
$from[] = "GERICHTE";
$order[] = "Gerichte.NAME";
$select[] = "Gerichte.NAME";

Das Beispiel berücksichtigt aus der Tabelle "GERICHTE" nur Datensätze, deren "NAME" die Zeichen "Suppe" enthält und nach NAME sortiert ist.
Bitte beachten das "order" nur in Kombination mit "select" funktioniert!

Erweiterter Filter durch Setzen von Filter-Einstellungen über den "$gsr"-Parameter (siehe Funktionsbeschreibung "get_gresult")

Example: 2:
$gsr[$tableIdGerichte][$fieldIdAnzahlZutaten][$laufendeFilterNr]=10;
$gsr[$tableIdGerichte][$fieldIdAnzahlZutaten]['num'][$laufendeFilterNr]=5;
 
$gsr[$tableIdGerichte][$fieldIdName][$laufendeFilterNr+1]='suppe';
$gsr[$tableIdGerichte][$fieldIdName]['txt'][$laufendeFilterNr+1]=1;
 
$gsr[$tableIdGerichte][$fieldIdName][$laufendeFilterNr+2]='eintopf';
$gsr[$tableIdGerichte][$fieldIdName]['txt'][$laufendeFilterNr+2]=1;
$gsr[$tableIdGerichte][$fieldIdName]['andor'][$laufendeFilterNr+2] = 2;

Im Beispiel sind die folgenden Variablen durch entsprechende Werte zu ersetzen:

  • $tableIdGerichte: ID der Tabelle "GERICHTE"
  • $fieldIdAnzahlZutaten: Feld-ID des Feldes "ANZAHLZUTATEN" aus der Tabelle "GERICHTE"
  • $fieldIdName: Feld-ID des Feldes "NAME" aus der Tabelle "GERICHTE"
  • $laufendeFilterNr: beliebig zu vergebender Index, bei mehreren Filtern sinnvollerweise aufsteigend ab 0
Beim Erstellen der Verknüpfung werden nur Datensätze der Tabelle "GERICHTE" vorgeschlagen/gelistet, bei denen
  • die Anzahl der Zutaten 10 oder mehr sind
  • die Zeichen "Suppe" oder "Eintopf" im Namen enthalten sind.
Example: 3:
$gsr[$tableIdGerichte][$fieldIdAnzahlZutaten][$laufendeFilterNr]=10;
$gsr[$tableIdGerichte][$fieldIdAnzahlZutaten]['num'][$laufendeFilterNr]=5;
 
$gsr[$tableIdGerichte][$fieldIdName][$laufendeFilterNr+1]='suppe';
$gsr[$tableIdGerichte][$fieldIdName]['txt'][$laufendeFilterNr+1]=1;
 
$gsr[$tableIdGerichte][$fieldIdName][$laufendeFilterNr+2]='eintopf';
$gsr[$tableIdGerichte][$fieldIdName]['txt'][$laufendeFilterNr+2]=1;
$gsr[$tableIdGerichte][$fieldIdName]['andor'][$laufendeFilterNr+2] = 2;
 
$myOnlyField[$tableIDPatienten] = array($fieldIdEinschraenkung);
$myResult = get_gresult($tableIDPatienten, 1, null, null, null, $myOnlyField, $ID, null, null);
$gsr[$tableIdGerichte][$fieldIdBeschreibung][$laufendeFilterNr+3]=$myResult[$tableIDPatienten][fieldIdEinschraenkung][0];
$gsr[$tableIdGerichte][$fieldIdBeschreibung]['txt'][$laufendeFilterNr+3]=1;
Im Beispiel sind die folgenden Variablen durch entsprechende Werte zu ersetzen:
  • $tableIdGerichte: ID der Tabelle "GERICHTE"
  • $tableIDPatienten: ID der Tabelle "PATIENTEN"
  • $fieldIdAnzahlZutaten: Feld-ID des Feldes "ANZAHLZUTATEN" aus der Tabelle "GERICHTE"
  • $fieldIdName: Feld-ID des Feldes "NAME" aus der Tabelle "GERICHTE"
  • $fieldIdBeschreibung: Feld-ID des Feldes "BESCHREIBUNG" aus der Tabelle "GERICHTE"
  • $fieldIdEinschraenkung: Feld-ID des Feldes "EINSCHRAENKUNG" aus der Tabelle "PATIENTEN"
  • $laufendeFilterNr: beliebig zu vergebender Index, bei mehreren Filtern sinnvollerweise aufsteigend ab 0
Beim Erstellen der Verknüpfung werden nur Datensätze der Tabelle "GERICHTE" vorgeschlagen/gelistet, bei denen
  • die Anzahl der Zutaten 10 oder mehr sind
  • die Zeichen "Suppe" oder "Eintopf" im Namen enthalten sind
  • die Zeichen aus dem Feld "EINSCHRAENKUNG" der Tabelle "PATIENTEN" in der Feld Beschreibung enthalten sind

Ersetzen des ursprünglichen SQL-Statements durch eine eigene Funktion

return myExt_FilterExample($gtabid,$utyp,$filter,$gsr,$verkn,$onlyfield,$null,$extension);
Example: 4:
function myExt_FilterExample($gtabid,$utyp,$filter,$gsr,$verkn,$onlyfield,$null,$extension){
    // get first query
    $verkn[relext] = '
	$where[] = "kunden.email is not null";
    ';   
    $query1 =  get_sqlquery($gtabid,$utyp,$filter,$gsr,$verkn,$onlyfield,$null,$extension);

    // get second query
    $verkn[relext] = '
	$where[] = "kunden.web is not null";
    ';
    $query2 =  get_sqlquery($gtabid,$utyp,$filter,$gsr,$verkn,$onlyfield);
   
    // filter 'order by'-clause out of sql query
    $query1['sql'] = explode('ORDER BY',$query1['sql']);
    $query1['sql'] = $query1['sql'][0];
    $query2['sql'] = explode('ORDER BY',$query2['sql']);
    $query2['sql'] = $query2['sql'][0];
   
    // union first and second query
    $query['sql'] = $query1['sql'].' UNION '.$query2['sql'];
    $query['count'] = $query1['count'].' UNION '.$query2['count'];
   
    return $query;
}

Im Beispiel werden zwei Abfragen generiert und danach manuell in einer neuen Abfrage vereint:
  • Die Erste Abfrage enthält alle Kunden, die eine Email angegeben haben
  • Die Zweite Abfrage enthält alle Kunden, die eine Website angegeben haben