Funktion "get gresult()"

Aus Limbas Wiki

Wechseln zu: Navigation, Suche

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


array get_gresult(numeric $gtabid, numeric $utyp, array $filter, array $gsr, array $verkn, array $onlyfield=null, numeric $single=null, array $extension=null, numeric $pointer=null)

Funktion für die Tabellenabfrage (./limbas_src/gtab/gtab.lib)

Parameter:

$gtabid

→ gültige Tabellen-ID: Die Abfrage wird auf die entsprechende Tabelle angewandt.

→ ungültige Tabellen-ID: Die Abfrage gibt eine Fehlermeldung zurück.

$utyp

Für $utyp sind folgende Werte gültig:

→ 1: Standard

→ 0: Einstellung für Spezialfälle, die hier nicht weiter erläutert werden.

$filter

→ null: Alle Datensätze, die den Kriterien der anderen Übergabeparametern entsprechen, sind im Rückgabewert enthalten

→ Gültige Einstellungen im $filter-Array wirken sich auf die interne Ergebnismenge der Datenbank oder die Datensätze im Rückgabewert aus:


$filter["nolimit"][$gtabid] = $nolimit;

Für $nolimit sind folgende Werte gültig:

  • 1: Die Anzahl der Datensätze in der internen Ergebnismenge der Datenbank ist unbegrenzt
  • 0: Die Anzahl der Datensätze in der internen Ergebnismenge der Datenbank ist durch den Wert der Umgebungsvariablen "resultspace" begrenzt.


$filter["anzahl"][$gtabid] = $anzahl;

Für $anzahl sind folgende Werte gültig:

  • 'all': Alle Datensätze aus der internen Ergebnismenge der Datenbank werden im Rückgabewert berücksichtigt
  • Zahl größer 0: "$anzahl" Einträge aus der internen Ergebnismenge der Datenbank werden im Rückgabewert berücksichtigt
  • default: Gibt es für diese Einstellung keine Angabe, so wird der Wert aus der Einstellung für die "max. Anzahl Treffer" aus den Benutzerdaten des angemeldeten Benutzers verwendet


$filter["gfrist"][$gtabid] = $gfrist;

Für $gfrist sind folgende Werte gültig:

  • 0: Einstellung ohne Auswirkung
  • Zahl ungleich 0: Nur die Datensätze, deren Wiedervorlage-Zeit abgelaufen ist, werden im Rückgabewert berücksichtigt


$filter["page"][$gtabid] = $page;

Für $page sind folgende Werte gültig:

  • Zahl kleiner gleich 1: Die Datensätze, die im Rückgabewert berücksichtigt werden, werden aus der internen Ergebnismenge der Datenbank ohne Offset ausgewählt.
  • Zahl größer 1: Die Datensätze, die im Rückgabewert berücksichtigt werden, werden aus der internen Ergebnismenge der Datenbank mit dem Offset "$page * $anzahl" ausgewählt. Ist dieser Offset größer als die Anzahl der Datensätze der internen Ergebnismenge, so wird kein Offset verwendet.


$filter["order"][$gtabid][$ordernumber] = array($gtabid,$tabellenfeldId,$order);

Mit der aufsteigenden $ordernumber können Unter-Sortierungen angegeben werden. Dabei beginnt die $ordernumber normalerweise mit 0.
Für $order sind folgende Werte gültig:

  • 'ASC': Die Sortierung der Datensätze in der internen Ergebnismenge der Datenbank erfolgt aufsteigend nach dem Inhalt des Tabellenfeldes mit der ID "$tabellenfeldId"
  • 'DESC': Die Sortierung der Datensätze in der internen Ergebnismenge der Datenbank erfolgt absteigend nach dem Inhalt des Tabellenfeldes mit der ID "$tabellenfeldId"

Soll bei gleichen Inhalt nach weiteren Tabellenfeldern sortiert werden, können mehrere derartige Anweisungen gesetzt werden.


$filter["unhide"][$gtabid] = $unhide;

Für $unhide sind folgende Werte gültig:

  • 0: Einstellung ohne Auswirkung
  • Zahl ungleich 0: Nur archivierte Datensätze werden im Rückgabewert berücksichtigt


$filter["viewversion"][$gtabid] = $viewversion;

Für $viewversion sind folgende Werte gültig:

  • 0: Einstellung ohne Auswirkung
  • Zahl ungleich 0: Bei versionierten Datensätze werden auch die älteren Datensätze im Rückgabewert berücksichtigt


$filter["locked"][$gtabid] = $locked;

Für $locked sind folgende Werte gültig:

  • 0: Einstellung ohne Auswirkung
  • Zahl ungleich 0: Nur gesperrte Datensätze werden im Rückgabewert berücksichtigt


$filter["relationval"][$gtabid] = 1;

Der Filter "relationval" bewirkt, dass man anstatt der Anzahl der verküpften Datensätze die IDs der verknüpften Datensätze als Array erhält.


Weitere Einstellungen im $filter-Array sind für Spezialfälle, die hier nicht weiter erläutert werden.

$filter["report"][$gtabid] = $report;
$filter["hidelocked"][$gtabid] = $hidelocked;
$filter["nosverkn"][$gtabid] = $nosverkn;
$filter["alter"][$gtabid] = $alter;
$filter["groupheader"][$gtabid]
$filter["groupheaderKey"][$gtabid]
$filter["tabulatorKey"]
$filter["gwidth"][$gtabid]
$filter["ext_RelationFields"]
$filter["formrelation"]
$filter["getlongval"]
$filter["report"]

$gsr

→ null: alle Datensätze, die den Kriterien der anderen Übergabeparametern entsprechen, sind im Rückgabewert enthalten

→ Durch gültige Einstellungen im $gsr-Array lassen sich Filter definieren, die bewirken, dass im Rückgabewert nur Datensätze mit bestimmten Inhalten berücksichtigt werden.

Ein gsr-Filter wird definiert durch eine Operation und einen Operanden. Bei der Auswertung wird die Operation mit dem Inhalt des entsprechenden Datenfeldes und dem Operanden ausgeführt. Als Ergebnis ergibt sich ein true/false-Wert. Mehrere gsr-Filter können per and/or kombiniert werden. Beim Endergebnis "false" wird der Datensatz nicht im Rückgabewert berücksichtigt.

Mit folgenden Konstrukten können Operation und Operand des Filters gesetzt werden (die Variable "$laufendeNr" kann dabei frei gewählt werden, muss aber bei den zwei bzw. drei Zuweisungen für einen Filter jeweils identisch sein):

  • Text-Operation ohne Berücksichtigung von Groß-/Kleinschreibung
$gsr[$gtabid][$tabellenfeldId][$laufendeNr] = $operand;
$gsr[$gtabid][$tabellenfeldId]['txt'][$laufendeNr] = $operationID;
Für die $operationID sind folgende Werte verfügbar:
  • 1: Überprüfung, ob der im Operanden angegebene Text im Inhalt des Datenfeldes enthalten ist ( %$% ) (default, falls nur der Operand angegeben ist)
  • 2: Überprüfung, ob der im Operanden angegebene Text identisch mit dem Inhalt des Datenfeldes ist ( == )
  • 3: Überprüfung, ob der Inhalt des Datenfeldes mit dem im Operanden angegebene Text anfängt ( $% )
  • numerische Operation
$gsr[$gtabid][$tabellenfeldId][$laufendeNr] = $operand;
$gsr[$gtabid][$tabellenfeldId]['num'][$laufendeNr] = $operationID;
Für die $operationID sind folgende Werte verfügbar:
  • 1: Überprüfung, ob der im Operanden angegebene Wert gleich dem Inhalt des Datenfeldes ist ( = )
  • 2: Überprüfung, ob der im Operanden angegebene Wert größer als der Inhalt des Datenfeldes ist ( > )
  • 3: Überprüfung, ob der im Operanden angegebene Wert kleiner als der Inhalt des Datenfeldes ist ( < )
  • 4: Überprüfung, ob der im Operanden angegebene Wert kleiner oder gleich dem Inhalt des Datenfeldes ist ( <= )
  • 5: Überprüfung, ob der im Operanden angegebene Wert größer oder gleich dem Inhalt des Datenfeldes ist ( >= )
  • 6: Überprüfung, ob der im Operanden angegebene Wert ungleich dem Inhalt des Datenfeldes ist ( != )
  • Text-Operation mit Berücksichtigung von Groß-/Kleinschreibung
$gsr[$gtabid][$tabellenfeldId][$laufendeNr] = $operand;
$gsr[$gtabid][$tabellenfeldId]['cs'][$laufendeNr] = $operationID;
Für die $operationID sind folgende Werte verfügbar:
  • 0: Überprüfung, ob der im Operanden angegebene Text im Inhalt des Datenfeldes enthalten ist ohne Berücksichtigung von Groß-/Kleinschreibung
  • 1: Überprüfung, ob der im Operanden angegebene Text im Inhalt des Datenfeldes enthalten ist unter Berücksichtigung von Groß-/Kleinschreibung
  • Ausschluß eines Wertes (negieren)
$gsr[$gtabid][$tabellenfeldId][$laufendeNr] = $operand;
$gsr[$gtabid][$tabellenfeldId]['neg'][$laufendeNr] = $operationID;
Für die $operationID ist folgender Wert verfügbar:
  • 1: Überprüfung, ob der im Operanden angegebene Wert NICHT dem des Datenfeldes entspricht. Handelt es sich um ein Text-Operanden, wird überprüft, ob der Text NICHT im Datenfeld enthalten ist.
  • Text-Operation für Texte aus Dateien bzw. Datenfelder des Typs long unter Verwendung der Index-Suche
$gsr[$gtabid][$tabellenfeldId][$laufendeNr] = $operand;
$gsr[$gtabid][$tabellenfeldId]['string'][$laufendeNr] = $operationID;
Für die $operationID ist folgender Wert verfügbar:
  • 1: Überprüfung, ob der im Operanden angegebene Text im Inhalt des Datenfeldes bzw. der verwiesenen Datei enthalten ist unter Berücksichtigung von Groß-/Kleinschreibung (?). Diese Operation ist nur möglich bei Indizierung aller Worte in der Reihenfolge des Vorkommens (Umgebungsvariable "indize_level" = 2).


Bei mehreren Filtern pro Tabellenfeld ist ab dem zweiten Filter die folgende Zuweisung zu ergänzen:

$gsr[$gtabid][$tabellenfeldId]['andor'][$laufendeNr] = $operationID;

Für die $operationID sind folgende Werte verfügbar:

  • 1: Der Filter wird mit den bisherigen AND-verknüpft (default)
  • 2: Der Filter wird mit den bisherigen OR-verknüpft

Bei mehreren Verknüpfungen mit wechselnder Verknüpfungsart ist der Vorrang von der verwendeten Datenbank abhängig. Die Umgebungsvariable "searchcount" definiert, wie viele Filter pro Tabellenfeld maximal berücksichtigt werden.


Bei Filter für mehrere Tabellenfelder definiert die folgende Zuweisung, wie diese verknüpft werden (ein Wechsel zwischen AND/OR ist hier nicht möglich):

$gsr[$gtabid]['andor'] = $operationID;

Für die $operationID sind folgende Werte verfügbar:

  • 1: Die Ergebnisse der Filter werden AND-verknüpft (default)
  • 2: Die Ergebnisse der Filter werden OR-verknüpft

$verkn

→ null oder 0: Alle Datensätze, die den Kriterien der anderen Übergabeparametern entsprechen, sind im Rückgabewert enthalten.

→ Array, das sinnvollerweise mit der Funktion init_relation() generiert wird: Im Rückgabewert werden nur Datensätze berücksichtigt, die mit dem durch die Übergabeparameter von init_relation() spezifizierten Tabellenfeld verknüpft sind.

→ ungültiger Wert: Der Rückgabewert enthält keine Datensätze.

$onlyfield

→ null: Die Datensätze im Rückgabewert beinhalten alle Tabellenfelder.

→ $onlyfield[$gtabid] = array($tabellenfeldId1, $tabellenfeldId2, ...): Die Datensätze im Rückgabewert beinhalten nur die gelisteten Tabellenfelder

→ wird ein array() mit für diese Abfrage ungültigen Daten übergeben, enthält der Rückgabewert keine Datensätze

→ wird nur der String "ID" übergeben, enthält der Rückgabewert nur systemspezifische Angaben sowie die ID der Datensätze

$single

Dieser Parameter ist für die Verwendung bei Tabellen (nicht bei Abfragen) vorgesehen. Er sollte nur gesetzt werden, wenn $pointer=null/0 ist.

→ null oder 0: Alle Datensätze, die den Kriterien der anderen Übergabeparametern entsprechen, sind im Rückgabewert enthalten.

→ gültige Datensatz-ID: Der Rückgabewert enthält nur den Datensatz mit der übergebenen Datensatz-ID, vorausgesetzt er entspricht den Kriterien der anderen Übergabeparameter.

→ ungültige Datensatz-ID: Der Rückgabewert enthält keine Datensätze.

$extension

Über diesen Parameter kann das generierte SQL Statement individuell erweitert werden.

Folgende Erweiterungen sind möglich:

  • select
erweitert die "SELECT" Komponente des SQL Statement. Es können eigene Felder oder Aliase hinzugefügt werden.
$extension['select'][0] = "TABELLENNAME.FELDNAME";
  • from
erweitert die "FROM" Komponente des SQL Statement. Es können eigene Tabellen oder Aliase hinzugefügt werden.
$extension['from'][0] = "TABELLENNAME";
  • where
erweitert die "WHERE" Komponente des SQL Statement.
$extension['where'][0] = "Bedingung";
  • order
ersetzt die interne Sortierung.
$extension['order'][0] = "FELDNAME";
  • ojoin
erweitert die "OUTER JOIN" Komponente des SQL Statements. Es können eigene LEFT/RIGHT (OUTER) JOINS hinzugefügt werden.
$extension['ojoin'][LINKER TABELLENNAME][RECHTER TABELLENNAME][0] = "Bedingung"; // LEFT (OUTER) JOIN
$extension['ojoin'][LINKER TABELLENNAME][RECHTER TABELLENNAME]['LEFT'][0] = "Bedingung"; // LEFT (OUTER) JOIN
$extension['ojoin'][LINKER TABELLENNAME][RECHTER TABELLENNAME]['RIGHT'][0] = "Bedingung"; // RIGHT (OUTER) JOIN
  • distinct
erweitert die Abfage zum ignorieren doppelter Ergebnisse.
$extension["distinct"] = "DISTINCT";

Beispiel 1 (select, from, where, order)

In diesem Beispiel sollen alle Mitarbeiter, die einen Dienstwagen besitzen mit dessen Marke, nach der Marke sortiert, aufgelistet werden:

require_once('../limbas_src/gtab/gtab.lib');

// Nehme zusätzlich aus der Tabelle "dienstwagen" das Feld "MARKE"
$extension['select'][0] = "DIENSTWAGEN.MARKE";
$extension['from'][0] = "DIENSTWAGEN";

// Wähle nur die Datensätze, bei denen das Kennzeichen des Mitarbeiters mit dem
// Kennzeichen des Dienstwagens übereinstimmt
$extension['where'][0] = "MITARBEITER.KENNZEICHEN = DIENSTWAGEN.KENNZEICHEN";

// Sortiere alphabetisch nach der Marke des Dienstwagens
$extension['order'][0] = "MARKE";

// Zeige nur den Namen des Mitarbeiters (Feld-ID: 1) und das Feld "MARKE"
$onlyfield[52] = array(1, 'MARKE');

// Rufe die Funktion get_gresult mit den definierten Optionen auf
// 52 ist hier die ID der Tabelle MITARBEITER
$gresult = get_gresult(52, 1, $filter, null, null, $onlyfield, null, $extension);

Das Ergebnis (Ausschnitt):

...
[1] => Array
     (
          [0] => August Spieldose
          [1] => Maximilian Oberhauser
          [2] => Alfred Unterberger
     )

[MARKE] => Array
     (
          [0] => Fiat
          [1] => Mercedes
          [2] => Opel
     )
...

Beispiel 2 (select, ojoin, order)

In diesem Beispiel sollen alle Mitarbeiter, egal ob sie einen Dienstwagen besitzen oder nicht, mit dessen Marke, nach der Marke sortiert, aufgelistet werden:

require_once('../limbas_src/gtab/gtab.lib');

// Nehme zusätzlich aus der Tabelle "dienstwagen" das Feld "MARKE"
$extension['select'][0] = "DIENSTWAGEN.MARKE";

// Nehme alle Mitarbeiter, auch wenn Sie keinen Dienstwagen besitzen
$extension["ojoin"]['MITARBEITER']['DIENSTWAGEN'][0] = "MITARBEITER.KENNZEICHEN = DIENSTWAGEN.KENNZEICHEN";

// Sortiere alphabetisch nach der Marke des Dienstwagens
$extension['order'][0] = "MARKE";

// Zeige nur den Namen des Mitarbeiters (Feld-ID: 1) und das Feld "MARKE"
$onlyfield[52] = array(1, 'MARKE');

// Rufe die Funktion get_gresult mit den definierten Optionen auf
// 52 ist hier die ID der Tabelle MITARBEITER
$gresult = get_gresult(52, 1, $filter, null, null, $onlyfield, null, $extension);

Das Ergebnis (Ausschnitt):

...
[1] => Array
     (
          [0] => August Spieldose
          [1] => Maximilian Oberhauser
          [2] => Alfred Unterberger
          [3] => Salamir Solemio
     )

[MARKE] => Array
     (
          [0] => Fiat
          [1] => Mercedes
          [2] => Opel
          [3] => 
     )
...

Beispiel 3 (select, ojoin mit Verknüpfungstabelle)

Alle Kunden sollen mit all ihren Kontakten (sofern vorhanden) ausgegeben werden.

require_once('../limbas_src/gtab/gtab.lib');

$table_id_kunden = 4;

// Um das Feld NAME in der Tabelle KONTAKTE auszugeben, muss es in das SELECT-statement eingefügt werden
// Um eine Verwechslung mit dem Feld NAME in der Tabelle KUNDEN zu vermeiden, wird das Alias KONTAKTNAME hinzugefügt
$extension['select'][] = "KONTAKTE.NAME AS KONTAKTNAME";

// Hier wird die Verknüpfung KUNDEN -> VERK_17e64eb8914c6 -> KONTAKTE in das statement einbezogen
// Die Verknüpfung VERK_17e64eb8914c6 -> KONTAKTE kann z.B. durch einen INNER JOIN realisiert werden
// Die Tabelle KUNDEN wird dann mit einem LEFT (OUTER) JOIN damit vereint.
// Der Verknüpfungstabelle wird der Einfachheit halber das Alias VERKN gegeben
$extension['ojoin']['KUNDEN']['(KONTAKTE INNER JOIN VERK_17e64eb8914c6 VERKN ON VERKN.VERKN_ID = KONTAKTE.ID)'][] = "KUNDEN.ID = VERKN.ID";

// Nur folgende Felder sollen angezeigt werden:
// - Name des Kunden   (NAME hat ID 2 in der Tabelle KUNDEN)
// - Name des Kontakts (In der select-Erweiterung oben wurde diesem Feld das Alias KONTAKTNAME gegeben)
$onlyfield[$table_id_kunden] = array(2, 'KONTAKTNAME');

// get_gresult wird mit der ID der Tabelle KUNDEN (4), sowie den weiteren Parametern aufgerufen
$gresult = get_gresult($table_id_kunden, 1, $filter, null, null, $onlyfield, null, $extension);

Das Ergebnis (Ausschnitt):

...
[2] => Array
     (
          [0] => Alfreds Futterkiste
          [1] => Alfreds Futterkiste
          [2] => Alfreds Futterkiste
          [3] => Antonio Moreno Taquería
          [4] => Around the Horn
          [5] => Blauer See Delikatessen
          [6] => Blondel père et fils
          [7] => Bólido Comidas preparadas
          [8] => Bon app'
          [9] => Bottom-Dollar Markets
          [10] => B's Beverages
     )

[KONTAKTNAME] => Array
     (
          [0] => Unterberger
          [1] => Oberhauser
          [2] => Summerey
          [3] => Ronzilius
          [4] => Sundoni
          [5] => Spieldose
          [6] => Unterseer
          [7] => Ibins
          [8] => Fresinger
          [9] => 
          [10] => 
     )
...

$pointer

Dieser Parameter ist für die Verwendung bei Abfragen vorgesehen. Er sollte nur gesetzt werden, wenn $single=null/0 ist.

→ null oder 0: Alle Datensätze, die den Kriterien der anderen Übergabeparametern entsprechen, sind im Rückgabewert enthalten.

→ gültige relative Position eines Datensatzes in der internen Ergebnismenge der Datenbank: Der Rückgabewert enthält nur den Datensatz, welcher sich in der internen Ergebnismenge der Datenbank an der übergebenen Position befindet, vorausgesetzt er entspricht den Kriterien der anderen Übergabeparameter.

→ ungültige relative Position eines Datensatzes in der internen Ergebnismenge der Datenbank: Der Rückgabewert enthält keine Datensätze.

Rückgabewert:

Im folgenden sind einige der möglichen Werte des zurückgegebenen Arrays erläutert. Welche Werte tatsächlich gesetzt sind, hängt von den Eingabeparametern ab.

  • [$gtabid][res_count]
→ Anzahl der durch die Abfrage ermittelten Datensätze in der Ergebnismenge der Datenbank
  • [$gtabid][need_time]
→ benötigte Zeit für die SQL-Abfrage der Datenbank
  • [$gtabid][max_count]
→ Anzahl der durch die Abfrage ermittelten Datensätze in der Ergebnismenge der Datenbank
  • [$gtabid][res_next]
→ Gibt die Position des ersten in diesem Rückgabewert enthaltenen Datensatzes in der internen Ergebnismenge der Datenbank an
  • [$gtabid][res_viewcount]
  • [$gtabid][LOCK][SELF][]
  • [$gtabid][LOCK][TIME][]
  • [$gtabid][LOCK][USER][]
  • für alle ($anzahl) ermittelten Datensätze:
  • für alle Tabellenfelder der Tabelle:
  • [$gtabid][$tabellenfeldid][0..($anzahl-1)"]
→ Tabelleninhalt
  • [$gtabid][id][0..($anzahl-1)"]
→ von LIMBAS vergebene eindeutige ID des Datensatzes (siehe auch Auto-ID)
  • [$gtabid][ERSTDATUM][0..($anzahl-1)"]
→Datum der Erstellung des Datensatzes (siehe auch Post-Date)
  • [$gtabid][EDITDATUM][0..($anzahl-1)"]
→Datum der der letzten Änderung des Datensatzes (siehe auch Edit-Date)
  • [$gtabid][EDITUSER][0..($anzahl-1)"]
→Name des Benutzers, der den Datensatz als letztes verändert hat (siehe auch Edit-User)
  • [$gtabid][ERSTUSER][0..($anzahl-1)"]
→Name des Benutzers, der den Datensatz erstellt hat (siehe auch Post-User)
  • [$gtabid][DEL][0..($anzahl-1)"]
→0: Der Datensatz ist nicht archiviert
→1: Der Datensatz ist archiviert.
  • [$gtabid][INUSE_TIME][0..($anzahl-1)"]
  • [$gtabid][INUSE_USER][0..($anzahl-1)"]
  • [$gtabid][IS_OWN_USE][0..($anzahl-1)"]
  • [$gtabid][VID][0..($anzahl-1)"]
  • [$gtabid][VPID][0..($anzahl-1)"]
  • [$gtabid][VACT][0..($anzahl-1)"]
  • [$gtabid][VDESC][0..($anzahl-1)"]
  • [$gtabid][IS_OWN_USER][0..($anzahl-1)"]

Beispiel:

ID Definitionen

$ID = 1;
define("CUSTOMER_TAB",5);
define("CONTACT_TAB",3);
define("CONTACT_LASTNAME",1);
define("CONTACT_NAME",2);
define("CUSTOMER_LASTNAME",1);
define("CUSTOMER_NAME",2);
define("CUSTOMER_STREET",8);
define("CUSTOMER_CONTACTS",6);

Ausgabe der Tabelle Kunde von Datensatz mit ID=1 und der Felder name; vorname; Straße

$gresult = get_gresult(CUSTOMER_TAB,1,null,null,null,array(CUSTOMER_TAB=>array(CUSTOMER_LASTNAME,CUSTOMER_NAME,CUSTOMER_STREET)),$ID);
$result_name = $gresult[CUSTOMER_TAB][CUSTOMER_LASTNAME][0];
$result_firstname = $gresult[CUSTOMER_TAB][CUSTOMER_NAME][0];
$result_street = $gresult[CUSTOMER_TAB][CUSTOMER_STREET][0];

Ausgabe der Verknüpften Kontakte dieses Kunden

$relation_setting = set_verknpf(CUSTOMER_TAB,CUSTOMER_CONTACTS,$ID,null,null,1,1);
$relation_setting["relext"] = null;
$gresult = get_gresult(CONTACT_TAB,1,null,null,$relation_setting,array(CONTACT_TAB=>array(CONTACT_TAB_LASTNAME,CONTACT_TAB_NAME)));
$result_name = $gresult[CONTACT_TAB][CONTACT_LASTNAME][0];
$result_firstname = $gresult[CONTACT_TAB][CONTACT_NAME][0];