DBJoinlist

Da die DBList nur simple Abfragen ausführen kann habe ich die DBJoinlist geschaffen.

Da die Abfragen komplexer sind, ist auch die Nutzung der Klasse leider etwas aufwendiger.

Der Konstruktor der Klasse sieht wie folgt aus:


public function __construct(
    $name,
    $extra="",
    $join="",
    $type="INNER",
    $fields="*",
    $joinsufix = ""
)

Fangen wir mal am besten mit den einzelnen Parametern an.

  • $name ist der Name der Tabelle die abgefragt werden soll.
  • $extra ist weiterer SQL-Code, also zb ein WHERE-Statement
  • $join ist die Tabelle die verknüpft werden soll.
  • $type ist der Typ der Verknüpfung, also “INNER”, “LEFT” oder “RIGHT”
  • $fields enthält die Felder die Abgefragt werden sollen
  • $joinsufix ist ein optionaler Parameter, für den Fall das die Tabelle mehrere Felder hat die $join.”id” heißen. (Wenn der Name des Feldes authorid_mentor ist, so wäre $joinsufix = “_mentor”)

Wenn $join ein Array ist, so werden die einzelnen Elemente als Tabellenname angesehen.

$fields kann entweder ein String sein, der dann direkt in den SQL-Befehl übernommen wird, alternativ kann es auch ein Array sein. Die Schüssel des Arrays gelten dann als Feldnamen, die Werte sind die Namen der Resultatfelder.


Beispiele

Es sind ziemliche viele Möglichkeiten, daher mal ein paar Beispiele. In jedem Fall frage ich eine imaginäre Tabelle “news” ab.

1. Einfache Abfrage, keinerlei genauere Definition


$results = new DBJoinList(
    "news",
    "WHERE (news.categoryid = 42)",
    "user"
);

2. Erweiterte Abfrage mit festgelegten Ergebnisfeldern


$results = new DBJoinList(
    "news",
    "WHERE (news.categoryid = 42)",
    "user",
    "inner",
    array(
        "user.name" => "authorname",
        "user.id" => "userid",
        "news.text" => "text",
        "news.title" => "title",
        "news.post_date" => "postdate"
    )
);

3. Verknüpfung mit 2 Tabellen


$results = new DBJoinList(
    "news",
    "WHERE (news.categoryid = 42)",
    array("user","category"),
    "inner",
    array(
        "user.name" => "authorname",
        "user.id" => "userid",
        "news.text" => "text",
        "news.title" => "title",
        "news.post_date" => "postdate",
        "category.name" => "categoryname"
    )
);

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>