MySQL Self Join - Verbinden einer Tabelle mit sich selbst

Das Verbinden einer Tabelle mit sich selbst ist keine eingebaute Funktion, sondern kann einfach durch Ändern des vom CRUD-Generator generierten SQL-Codes durchgeführt werden.


Über Tabellen, die eine Verknüpfung mit sich selbst verwenden

Einige Tabellen können manchmal einen relationalen Schlüssel für sich selbst verwenden.
Zum Beispiel eine Tabelle, die gleichzeitig Kategorien und Unterkategorien enthält (siehe das Bild unten).
In diesem Beispiel hat jede Unterkategorie eine Beziehung zu einer übergeordneten Kategorie.

MySQL self-join structure example
Beispiel für eine MySQL-Tabelle mit einem relationalen Schlüssel, der auf sich selbst verweist

Wie man selbstverknüpfte Tabellen mit PHP CRUD Generator verwendet

PHP CRUD Generator ist in der Lage, diese speziellen Verknüpfungen genauso zu verstehen wie die üblichen Beziehungen.
Die im Admin generierten Formulare verwenden diese Beziehungen ohne Probleme.

Andererseits muss die SQL-Abfrage, die zum Abrufen von Datensätzen aus der READ-Liste verwendet wird, bearbeitet werden, damit sie richtig funktioniert.

Und so geht's:

  1. Erstellen Sie Ihre READ-Liste wie gewohnt mit dem Generator.
  2. Öffnen Sie das PHP-Klassenmodell für Ihre Tabelle, das Sie unter admin/class/crud/[Tabellenname].php finden.

  3. In dieser Datei finden Sie 2 Zeilen, die die Basis-SQL-Abfrage erstellen.

    Mit den oben genanntenBeispiel-"Kategorien" sollte es so aussehen:

    $this->join_query = ' LEFT JOIN `categories` ON `categories`.`parent_category_id`=`categories`.`id`';
    $qry_start = 'SELECT
    `categories`.`id`,
    `categories`.`parent_category_id` AS `categories_parent_category_id`,
    `categories`.`name`
    FROM categories';
  4. Sie müssen diesen Antrag bearbeiten, um:

    • einen Alias für den Tabellennamen verwenden, der sich auf das Beziehungsfeld bezieht.
    • verschieben Sie den LEFT JOIN in die Variable $qry_start.

    Ihr endgültiger Code sollte wie folgt aussehen:

    $this->join_query = '';
    $qry_start = 'SELECT
    `categories`.`id`,
    `c2`.`parent_category_id` AS `categories_parent_category_id`,
    `categories`.`name`
    FROM categories
    LEFT JOIN `categories` c2
    ON `categories`.`parent_category_id`=`c2`.`id`';

    In diesem Beispiel ist c2 ein Alias für die Tabelle categories.
    Wir verwenden ihn mit der parent_category_id


    Ein sehr gutes Tutorial über MySQL Self Join finden Sie hier

PHP CRUD-Tutorial Hauptseite