Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] show COLUMNS mit referenzen?

Einklappen

Neue Werbung 2019

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

  • [Erledigt] show COLUMNS mit referenzen?

    Hey ho!

    Gegeben:

    tabelle1
    t1_id
    t1_t2_id
    t1_name

    tabelle2
    t2_id
    t2_name

    Gibt es eine Möglichkeit, die ich übersehe, bei
    Code:
    show COLUMNS from t1
    die Referenz Tabelle 2 mit anzusprechen, oder muss ich das via zwei Abfragen gestalten?

    Damit das ganze so ausschaut:
    Code:
    var_dump($sql)
    
    array( '0'  -> t1_id,
             '1'  -> array('0' -> 't2.name', // test 1
                       '1' -> 't2.name', // test 2
                       '2' -> 't2.name' // test 3
                              ) 
             '2' -> 't1.name'
             )


  • #2
    Wenn du statt SHOW COLUMNS das information_schema nutzt, geht das...

    Kommentar


    • #3
      Wenn es nur darum geht Referenzen sichtbar zu machen, reicht auch ein SHOW CREATE TABLE.
      PHP-Klassen auf github

      Kommentar


      • #4
        Zitat von erc Beitrag anzeigen
        Wenn du statt SHOW COLUMNS das information_schema nutzt, geht das...
        Danke für den Hinweis.
        Hab nun mal geguckt undn google gepickst

        folgendes erzeugt mir ein array, wo ich alle feld_name in einer ebene habe
        Code:
        (SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'DB1' AND TABLE_NAME = 'fahrzeug_typ')
        UNION
        (SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'DB1' AND TABLE_NAME = 'fahrzeuge')
        folgendes erzeugt die fehlermeldung:
        Subquery returns more than 1 row
        Code:
        SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'DB1' AND TABLE_NAME = 'fahrzeug_typ' AND (SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'DB!' AND TABLE_NAME = 'fahrzeuge' )
        hast da noch ein hinweis?

        denn ich benötige mehrdimensionales array

        Kommentar


        • #5
          Zitat von jspit Beitrag anzeigen
          Wenn es nur darum geht Referenzen sichtbar zu machen, reicht auch ein SHOW CREATE TABLE.
          leider reicht das nicht ganz.

          ich benötige den field_name der tabelle 1 und die referenz_field_name von tabelle 2 in einem array

          bisher löse ich das über zwei abfragen.
          würde das aber gern in einer zusammenführen

          Kommentar


          • #6
            Zitat von MrJung Beitrag anzeigen
            leider reicht das nicht ganz.
            Mal ein Blick übern Tellerand zu PostgreSQL:

            Code:
            test=*# create table master (id int primary key);
            CREATE TABLE
            test=*# create table slave (m_id int references master);
            CREATE TABLE
            test=*# \d slave
                 Table "public.slave"
             Column |  Type   | Modifiers
            --------+---------+-----------
             m_id   | integer |
            Foreign-key constraints:
                "slave_m_id_fkey" FOREIGN KEY (m_id) REFERENCES master(id)
            
            test=*# \d master
                Table "public.master"
             Column |  Type   | Modifiers
            --------+---------+-----------
             id     | integer | not null
            Indexes:
                "master_pkey" PRIMARY KEY, btree (id)
            Referenced by:
                TABLE "slave" CONSTRAINT "slave_m_id_fkey" FOREIGN KEY (m_id) REFERENCES master(id)
            PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

            Kommentar


            • #7
              Ich hab das Problem irgendwie völlig falsch verstanden und bin mir auch nicht sicher ob ichs jetzt versanden habe.

              Schau dir mal GROUP_CONCAT() + GROUP BY t1.id an.

              Kommentar


              • #8
                Zitat von erc Beitrag anzeigen
                Ich hab das Problem irgendwie völlig falsch verstanden und bin mir auch nicht sicher ob ichs jetzt versanden habe.

                Schau dir mal GROUP_CONCAT() + GROUP BY t1.id an.
                ok, leider hatte ich nen denkfehler.

                show columns hilft mir gar nicht, was ich abdecken wollte.

                das geht allein über ein select mit join

                sorry, für die arbeit

                Kommentar


                • #9
                  Da ich gefragt wurde, hier mal die Abfrage wie ich sie bisher löse
                  Da es sich um eine Abfrage, zur Ausgabe als Input Felder, handelt, müsste diese, an die angepasst werden
                  wenn man was anderes als input Felder möchte.

                  Der Code ist zwar unkommentier, sollte aber schnell durchschaubar sein

                  PHP-Code:
                  <?php
                  $db_connection 
                  = new mysqli(__CFG_DB_SERVER__CFG_DB_USERNAME__CFG_DB_PASSWORD'DB1');
                  $fields_sql " show COLUMNS from tabelle ";
                  $result_of_fields $db_connection->query($fields_sql);
                  $out .= '<p>Bitte füllen Sie alle Felder aus</p>';
                  $out .= '<table>';
                  $i  0;
                  $z 0;
                  while (
                  $row $result_of_fields->fetch_array()) {
                              
                  $sub_fields_sql "show COLUMNS from $row[0]";
                              
                  $db_connection2 = new mysqli(__CFG_DB_SERVER__CFG_DB_USERNAME__CFG_DB_PASSWORD'DB1');
                              if(
                  $result_of_sub_fields $db_connection2->query($sub_fields_sql)){
                                      while (
                  $sub_row $result_of_sub_fields->fetch_row()) {
                                              
                  $z++;
                                              if(
                  $z 1) {
                                                   
                  $sub_field_data_sql "select $sub_row[0] from $row[0]";
                                                  
                  $db_connection3 = new mysqli(__CFG_DB_SERVER__CFG_DB_USERNAME__CFG_DB_PASSWORD'DB1');
                                                  if(
                  $result_of_sub_field_data $db_connection3->query($sub_field_data_sql)){
                                                          while (
                  $sub_row_data $result_of_sub_field_data->fetch_array()) {
                                                                      
                  $option_field[] = $sub_row_data[0];                    
                                                          }
                                                  }
                                              }
                                      }
                              }
                              
                  $i++;
                              if(
                  $i >2) {    
                                      if(!isset(
                  $option_field)) {
                                      
                  $length preg_replace('/[^0-9]+/'''$row[1]);
                                      
                  $label ucwords(str_replace('_'' '$row[0]));    
                                      
                  $out .= '<tr><td><label>'.$label.'</label></td><td><input type="text" size=""     maxlength="'.$length.'" name="neu_'.$row[0].'" ></td></tr>';            
                                      }else{
                                          
                  $out .= '<select>';
                                          foreach(
                  $option_field as $option_field_value){
                                              
                  $out .= '<option value="value">'.$option_field_value.'</option>';
                                          }
                                          
                  $out .= '</select>';
                                      }    
                              }
                          }
                  $out .= '</table>';
                  ?>

                  Kommentar


                  • #10
                    Zitat von Linus Torvalds
                    If you need more than 3 levels of indentation, you're screwed anyway, and should fix your program.
                    Standards - Best Practices - AwesomePHP - Guideline für WebApps

                    Kommentar


                    • #11
                      Wenn eine Verschachtungstiefe von mehr als 3 schon verbockt ist, was ist dann eigentlich folgendes?!?

                      PHP-Code:
                      new mysqli();
                      while() {
                         new 
                      mysqli();
                         while() {
                           new 
                      mysqli();
                         }

                      Kommentar


                      • #12
                        Bitte lesen Sie die Eingangspost.
                        Danke, für Ihre Zeit

                        Kommentar

                        Lädt...
                        X