Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Tabllenname einer Spalte in OCI [mysql_field_table() für Oracle]

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Tabllenname einer Spalte in OCI [mysql_field_table() für Oracle]

    Hallo liebe PHP-Gemeinde,

    ich bin neu hier und hoffe ich schreibe in der richtigen Abteilung.

    Folgendes Problem:
    Ich habe in PHP eine Grid-Klasse geschrieben die dynamisch Tabellen generiert und dazu auch Abfragen erzeugen kann. Soweit funktioniert auch alles ohne Probleme solange ich nur auf 1 Tabelle zugreife. Ein Problem tritt jetzt allerdings auf wenn...

    SELECT TB1.ID, TB2.ID, TB1.Name
    FROM Tabelle1 TB1 , Tabelle2 TB2
    WHERE ID = '12'

    Da ich dynamisch über den Spaltenname eine Where-Abfrage generiere
    bekomm ich das Problem das "ID" nicht eindeutig zugewiesen werden kann.
    Über die "_field_name()" Funktion bekomm ich aber nur den Spaltenname Ohne Tabellenname oder Alias.
    In MsSQL gibt es dafür den Befehl "_field_table" über den das gehen soll, für Oracle habe ich leider keine Alternative gefunden.

    Spaltenaliase funktionieren auch nicht da sie im SQL Standard nicht in der WHERE-Bedingung verwendet werden dürfen.

    Ich hoffe ihr könnt mir Helfen
    Gruß
    Chris

  • #2
    Spaltenaliase funktionieren auch nicht da sie im SQL Standard nicht in der WHERE-Bedingung verwendet werden dürfen.
    keine Ahnung, ob Du das selbe meinst, aber ich verwende problemlos solche Klauseln:
    Code:
    WHERE TB1.`ID` = 12

    Kommentar


    • #3
      Ja Tabellenaliase verwenden funktioniert natürlich problemlos. Vllt. war ich nicht genau genug, mein Problem ist das ich über das WHERE-Statement
      dynamisch generiere und mir in der klasse dafür über die PHP-Funktion:
      PHP-Code:
      oci_field_name() 
      die Spaltennamen hole. Das Problem hierbei ist ich bekomme hier nur Spalte "ID", "ID", "Name"!
      In MySQL gibt es jetzt die Funktion
      PHP-Code:
      mysql_field_table() 
      Indem ich den Tabellenname meiner Spalte über meine SQL Abfrage bekomm Code sieht so aus:
      PHP-Code:
      $result mysql_query($this->sqlSELECT);
      $iColumns mysql_num_fields($result);
      for (
      $i 0$i $iColumns$i++) {
        
      $arrCols[] = mysql_field_table($result$i);
        
      $arrCols[] = mysql_field_name($result$i);
      }                } 
      Ich suche selbiges für Oracle(Wie bekomm ich den Tabellenname/Alias meiner Spalte)! Konnte jedoch nichts finden.

      Kommentar


      • #4
        Ist scheinbar ein bekannter BUG: http://www.google.de/search?q=php+oci_field_table

        Kommentar


        • #5
          Danke für deine Hilfe. Selbiges Google Ergebnis hab ich auch schon bekommen, aber die Einträge sind von 2006 oder älter, da muss
          doch nachgebessert worden sein oder nicht? Ich dachte das Problem sollten einige Leute mehr haben oder sind schon so viele auf
          die ganzen Frameworks umgestiegen dass das nicht mehr nötig war?
          Ich Programmier PHP nun erst seit knapp einem Monat bin also noch recht neu in der Web Entwicklerszene aber das wäre ein wirklich entäuschendes
          Ergebnis wenn hier nicht nachgebessert worden ist.

          Kommentar


          • #6
            das Problem ist eher umgekehrt - nur gaaaaanz wenige Entwickler bauen ihren Code so wie du komplett generisch / dynamisch .... im Regelfall kennt man doch seine Tabellen und ihre Spalten ... bzw vergibt die Aliasnamen per Hand, damit eben überschriebene Spalten (gleicher Name) nicht stören und wer es trotzdem macht .. dem helfen dann ORM - Frameworks

            Kommentar


            • #7
              Vielleicht hilft Dir das ja weiter: http://www.oracle.com/technetwork/to...le-1884760.pdf

              Ist 2012 zuletzt überarbeitet worden, vielleicht wirst Du da ja fündig...

              Kommentar


              • #8
                Naja ein Filter sollte doch schon dynamisch generiert werden denke ich, ich bau doch für den Standardfall nicht jedes Filterstatement händisch auf,
                dafür bin ich als Entwickler ja schon viel zu faul . Desweiteren sollte man über sein SQL Statement über das Ergebnis schon an den Spaltenname(Eindeutig mit Tabellenname/Alias) kommen ohne Ihn hart zu verdrahten.
                Naja es wird dieses Jahr voraussichtlich noch eine Zend Schulung geben die hoffentlich einige Probleme löst.

                Vielen Dank Arne ich schau mir das gleich mal an und meld mich wenn ich fündig wurde.
                Gruß
                Chris

                Kommentar


                • #9
                  Nachdem ich das Problem erstmal hinten angestellt hatte wurde heute kurzerhand die Lösung gefunden.

                  LÖSUNG: Views!
                  Da man im allgemeinen sowieso Views verwenden sollte ist das relativ simpel Bsp:

                  Während:
                  Code:
                  SELECT TB1.ID as ID, TB2.ID as ID2, TB1.Name 
                  FROM Tabelle1 TB1 , Tabelle2 TB2
                  WHERE ID = '12'
                  zu Problemen führt da Spaltenaliase im Standard SQL in der WHERE-Bedingung nicht erlaubt ist es beim View natürlich ohne Probleme möglich

                  Der View mit dem Namen "Mein_View":
                  Code:
                  SELECT TB1.ID as ID, TB2.ID as ID2, TB1.Name 
                  FROM Tabelle1 TB1 , Tabelle2 TB2
                  und dann...

                  Code:
                  SELECT * FROM Mein_View
                  WHERE ID = '12'
                  Somit muss ich den Tabellenname/Alias nicht wissen da die Spalte über den Namen eindeutig indentifizierbar der View erledigt den Rest
                  und man kann ungestört weiter nur mit der "field_name()" Funtion arbeiten.

                  Kommentar

                  Lädt...
                  X