foreign keys auslesen, aber wie ???

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • foreign keys auslesen, aber wie ???

    hollachens zusammen,

    mit

    CREATE TABLE person (
    id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
    name CHAR(60) NOT NULL,
    PRIMARY KEY (id)
    );

    CREATE TABLE shirt (
    id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
    style ENUM('t-shirt', 'polo', 'dress') NOT NULL,
    color ENUM('red', 'blue', 'orange', 'white', 'black') NOT NULL,
    owner SMALLINT UNSIGNED NOT NULL REFERENCES person(id),
    PRIMARY KEY (id)
    );

    bekomme ich ja einen fremdschlüssel untergebracht. mit mysql_field_flags() bekomm ich die (erweiterten eigenschaften) eines feldes. wie bekomm ich nun aber raus, das owner die refernz auf person.id ist ??? *überleg*

    meine vorhandene doku gibt mir dazu nüscht her

    bis denne

    megle

  • #2
    Probier´s mal mit show index from shirt
    mein Sport: mein Frühstück: meine Arbeit:

    Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

    Kommentar


    • #3
      probier ...

      $c_query_tabelle = "show index from shirt;";
      $r_abfrage = mysql_query($c_query_tabelle, $r_sqlhandle);
      $c_inhalt = mysql_fetch_object($r_abfrage);
      echo "<pre>\n";
      print_r( $c_inhalt);
      echo "</pre>\n";

      liefert mir

      stdClass Object
      (
      [Table] => shirt
      [Non_unique] => 0
      [Key_name] => PRIMARY
      [Seq_in_index] => 1
      [Column_name] => id
      [Collation] => A
      [Cardinality] => 0
      [Sub_part] =>
      [Packed] =>
      [Null] =>
      [Index_type] => BTREE
      [Comment] =>
      )


      da steht sich nichts von person, gar nirgendwo ... überleg
      Zuletzt geändert von meglepetes; 09.10.2003, 16:04.

      Kommentar


      • #4
        schon mal überlegt, dass da vielleicht mehr als ein Index existiert?

        $c_query_tabelle = "show index from shirt;";
        $r_abfrage = mysql_query($c_query_tabelle, $r_sqlhandle);
        echo "<pre>\n";
        while ($c_inhalt = mysql_fetch_assoc($r_abfrage)) print_r($c_inhalt);
        echo "</pre>\n";
        mein Sport: mein Frühstück: meine Arbeit:

        Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

        Kommentar


        • #5
          http://www.mysqldiff.org/previews ... da mache ich sowas über ein parsen des "SHOW CREATE TABLE" ... ein andere Weg wäre der bei einer InnoDB-Tabelle den Kommentar zu parsen ... das finde ich allerdings nicht so schön ... derzeit gibt es meines Wissens noch keine PHP-Funktioni mit der man Fremdschlüssel direkt auslesen könnte.

          (library/generator.lib.php ab Zeile 199 ...)
          carpe noctem

          [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
          [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

          Kommentar


          • #6
            hollachens und einen leicht veregneten guten morgen ...

            irgendwie binsch noch nicht richtig wach oder ich mach was heftigst verkehrt, in jedem fall will es noch nicht so, wies soll ...

            $c_query_tabelle = "SHOW TABLE STATUS FROM xml;";
            $r_abfrage = mysql_query($c_query_tabelle, $r_sqlhandle);
            echo mysql_error();
            $i_anzahl = mysql_num_rows($r_abfrage);
            # $c_inhalt = mysql_fetch_object($r_abfrage);
            echo "<pre>\n";
            # print_r( $c_inhalt);
            while ($c_inhalt = mysql_fetch_assoc($r_abfrage)){
            print_r($c_inhalt);
            }
            echo "</pre>\n";

            liefert mir eine ganze menge neues *freu* aber nicht den schlüssel, den ich brauche HILFE ...


            Array
            (
            [Name] => person
            [Type] => InnoDB
            [Row_format] => Fixed
            [Rows] => 0
            [Avg_row_length] => 0
            [Data_length] => 16384
            [Max_data_length] =>
            [Index_length] => 0
            [Data_free] => 0
            [Auto_increment] => 1
            [Create_time] =>
            [Update_time] =>
            [Check_time] =>
            [Charset] => latin1_swedish_ci
            [Create_options] =>
            [Comment] => InnoDB free: 4096 kB
            )
            Array
            (
            [Name] => shirt
            [Type] => InnoDB
            [Row_format] => Fixed
            [Rows] => 0
            [Avg_row_length] => 0
            [Data_length] => 16384
            [Max_data_length] =>
            [Index_length] => 0
            [Data_free] => 0
            [Auto_increment] => 1
            [Create_time] =>
            [Update_time] =>
            [Check_time] =>
            [Charset] => latin1_swedish_ci
            [Create_options] =>
            [Comment] => InnoDB free: 4096 kB
            )

            axo, vielleicht noch nachliefern sollt ...

            MySQL 4.1.0-alpha-max-nt
            PHP Version 4.3.1
            Client API version 3.23.49
            Zuletzt geändert von meglepetes; 10.10.2003, 09:11.

            Kommentar


            • #7
              7.5.3 CREATE TABLE-Syntax
              ...
              Die FOREIGN KEY-, CHECK- und REFERENCES-Klauseln tun momentan noch nichts. Die Syntax wird nur aus Gründen der Kompatibilität bereit gestellt, um das Portieren von Code von anderen SQL-Servern zu erleichtern und um Applikationen laufen zu lassen, die Tabellen mit Referenzen erzeugen. See section 2.7.4.5 Fremdschlüssel.
              ...

              2.7.4.5 Fremdschlüssel

              Ab MySQL-Serverversion 3.23.44 unterstützen InnoDB-Tabellen die Prüfung auf Fremdschlüsselbeschränkungen wie CASCADE, ON DELETE und ON UPDATE. @xref{InnoDB foreign key constraints}.

              Bei anderen Tabellentypen parst der MySQL-Server die FOREIGN KEY-Syntax in CREATE TABLE-Befehlen lediglich, benutzt oder speichert diese Informationen jedoch nicht.
              Ergo: Das geht nur mit InnoDB-Tabellen!

              Da hilft eventuell nur noch die seit V 2.3.0 im phpMyAdmin eingebaute Relation-IUnterstützung (http://www.phpmyadmin.net/documentation/#pmadb) oder ein vergleichbares selbstgebautes Feature.

              Relation erzeugen (nachdem die Default-Tabellen in der DB phpmyadmin angelegt sind; und nur wenn alle drauf zugreifen dürfen):

              insert into use phpmyadmin.pma_relation values ('meinedb', 'shirt', 'owner', 'meinedb', 'person', 'id')

              auslesen:
              select master_field, foreign_table, foreign_field
              from phpmyadmin.pma_relation values
              where master_db='meinedb' and master_table='shirt'
              mein Sport: mein Frühstück: meine Arbeit:

              Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

              Kommentar

              Lädt...
              X