JOIN - Frage zu Angabe von Spaltennamen mit *

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

  • JOIN - Frage zu Angabe von Spaltennamen mit *

    Hallo,

    wenn man 2 Tabellen so abfrägt:

    SELECT t1.*, t2.* FROM t1 LEFT JOIN t2....

    und es existieren in beiden Tabellen identische Spaltennamen, so scheint immer der Wert der Spalte aus der zweiten Tabelle in den Ergebnis-datensatz aufgenommen zu werden, der Wert aus der ersten Tabelle mit dem gleichen Spaltenname wird hier wohl einfach überschrieben.

    Lässt sich sowas verhindern? Manchmal ist es nämlich mühseelig eine ellenlange Spaltenliste in die Query zu packen, da wären halt 2 Angaben mit den Tabellenamen und einfach nen * dazu doch recht bequem.

    Cool wäre z.B. eine arbeitsweise mit einem Prefix, also dass dann z.b. das Ergebnis ungefähr in der Art daherkommt:

    t1_ID = 2121
    t2_ID = 25
    .
    .
    .

    Gibts sowas direkt von Mysql her?

    Ansonsten bin ich am überlegen ob ich die Query mit den Prefixen nicht automatisch erstellen lasse in dem ich die Tabellen mit 'Show Columns...' abfrage und in ner Schleife eine Query zusammenbauen lasse, sodass in etwa sowas rauskommt:

    SELECT t1.ID as t1_ID, t1.Name as t1_Name, t2.ID as t2_ID...

    Aber schöner wäre es natürlich wenn es einen 'direkteren' Web gäbe.

    Gruss
    Quetschi
    Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
    Schön - etwas Geschichte kann ja nicht schaden.
    Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

  • #2
    Lässt sich sowas verhindern? Manchmal ist es nämlich mühseelig eine ellenlange Spaltenliste in die Query zu packen
    Genau das macht aber eine Saubere Programmierung aus. Warum? Steht in diversen Threads und Faqs...

    Kommentar


    • #3
      Re: JOIN - Frage zu Angabe von Spaltennamen mit *

      Original geschrieben von Quetschi

      und es existieren in beiden Tabellen identische Spaltennamen, so scheint immer der Wert der Spalte aus der zweiten Tabelle in den Ergebnis-datensatz aufgenommen zu werden, der Wert aus der ersten Tabelle mit dem gleichen Spaltenname wird hier wohl einfach überschrieben.
      Quatsch, es wird nicht überschrieben, print_r hilft dir gern bei der Suche , tabelle.* wird nur eingesetzt wenn du alle (oder fast alle) Spalten brauchst, und wenn du weisst, dass es gleiche Spaltennamen vorkommen, dann greife über den nummerischen Index auf die Elemente zu.

      Kommentar


      • #4
        Hab nochmal ein wenig nachgeschaut, aber die Ergebnisse waren noch etwas unbefriedigend. Hast du vielleicht nen Link zu ner FAQ oder so im Kopf wo sowas behandelt wird?

        Was spricht konkret dagegen die Spaltennamen einfach über den * anzugeben (außer der Tatsache, dass sich dabei der von mir geschilderte Effekt bei gleichen Spaltennamen einstellt)? Drückt das auf die Performance?

        Wäre die Angabe mit dem * in Ordnung wenn die Spaltennamen so aufgebaut wären?

        Tabelle1:
        t1_ID
        t1_Name
        usw...

        Tabelle2
        t2_ID
        t1_ID
        t2_Wohnort
        usw...
        Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
        Schön - etwas Geschichte kann ja nicht schaden.
        Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

        Kommentar


        • #5
          http://faq-php.de/q/q-sql-select.html

          Kommentar


          • #6
            @asp2php

            Hab hierzu natürlich schon var_dump (was ja fast das gleiche wie print_r ist) benutzt.

            Wenn ich mysql_fetch_array() mit dem Parameter MYSQL_ASSOC einsetze, passiert aber genau das, dass ein identischer Spaltenname einfach mit dem Wert aus der zweiten Tabelle überschrieben wird.

            Den numerischen Index setze ich in der Regel nicht ein, ich brauch den assoziativen zur weiteren Verwendung für die Platzhalter in meinen Templates.
            Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
            Schön - etwas Geschichte kann ja nicht schaden.
            Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

            Kommentar


            • #7
              Den numerischen Index setze ich in der Regel nicht ein, ich brauch den assoziativen zur weiteren Verwendung für die Platzhalter in meinen Templates.
              den kannst du dir nachher immernoch basteln!

              Kommentar


              • #8
                @TobiaZ

                Thx für den Link

                Gruss
                Quetschi

                EDIT:
                den kannst du dir nachher immernoch basteln!
                Weiß zwar jetzt nicht genau, wie du das meinst, aber ich glaub da ist es doch sinnvoller gleich die Spaltennamen ordentlich in der Query anzugeben (hab ich in der Regel ja bisher immer gemacht ), was ja laut deinem Link tatsachlich die Performance erhöhen könnte. Bei identischen Spaltennamen verwenden ich eben AS zur Angabe von nem Alias und kann dann bequem über den Assoziativen Index zugreifen.
                Zuletzt geändert von Quetschi; 03.06.2005, 11:36.
                Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
                Schön - etwas Geschichte kann ja nicht schaden.
                Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

                Kommentar


                • #9
                  Ich meine damit, dass du dir ja aus den numerischen indexen immernoch ein associatives array zusammen bauen kannst.

                  Aber wie gesagt, sauber ist ohne select all.

                  Kommentar


                  • #10
                    *kopfkratz*

                    eigentlich ist das Thema für mich eh gegessen, trotzdem würd mich interessieren wie ich aus nem Array mit numerischen Index plötzlich ein associatives zaubern soll? Durch manuelle Zuweisung?

                    $ar["ID"] = $row[0];

                    Wie gesagt, dann hau ich lieber gleich alles in die Query rein und habs nachher bequemer.

                    Oder was wäre da dein Ansatz gewesen?
                    Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
                    Schön - etwas Geschichte kann ja nicht schaden.
                    Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

                    Kommentar


                    • #11
                      eigentlich ist das Thema für mich eh gegessen, trotzdem würd mich interessieren wie ich aus nem Array mit numerischen Index plötzlich ein associatives zaubern soll? Durch manuelle Zuweisung?
                      z.B. Sauber war die Lösung schon ab dem "Select *" nicht mehr, da macht das Zuweisen auch nichts mehr aus

                      Wie gesagt, dann hau ich lieber gleich alles in die Query rein und habs nachher bequemer.
                      Richtig!

                      Kommentar

                      Lädt...
                      X