UPDATE - ALTER TABLE - joins > Anfängerfrage

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

  • UPDATE - ALTER TABLE - joins > Anfängerfrage

    Hallo zusammen,

    bitte seht es mir nach, wenn meine Fragen nicht ganz so anspruchsvoll sind Ich suche jetzt schon seit Stunden herum finde aber nichts zur Lösung meines Problems. Vielelicht sehe ich den Wald vor lauter Bümen nicht...

    Ich habe eine Tabelle die einmalig mit Daten aus einer anderen Tabelle upgedated werden soll und ich bitte um Hilfe für den Syntax.

    Ausgangssituation:
    Tabelle: user
    Felder: userid und username

    Tabelle: pics
    Felder: owner_id und owner_name*

    *In der Tabelle pics fehlen die Inhalte des Felds owner_name. Alle anderen Felder sind gefüllt.

    Ich möchte jetzt "owner_name" mit den Daten aus der Tabelle pics füllen. "userid" und "owner_id" haben einen identischen inhalt.

    Nach längerem Studium habe ich vieles über UPDATE, ALTER TABLE, atomic irgendwas sowie div. joins gelesen aber irgendwie bin zu dusselig es anzuwenden. Liegt vielleicht daran, dass ich damit eigentlich nichts zu tun habe.

    Eines der vielen Versuche (in diversen variationen):

    UPDATE pics SET owner_name = username FROM user WHERE pics.ownerid = user.userid;

    So in der Art habe ich es auch mit LEFT JOIN ON versucht´.

    Ich wäre über einen Tip oder einen richtigen Syntax sehr erfreut

    Vielen Dank!
    André

  • #2
    Moin,

    denke ich habe es richtig verstanden. Probiere das mal aus und lasse uns wissen ob es richtig war.

    Code:
    UPDATE pics,
    user SET pics.owner_name = user.username WHERE pics.owner_id = user.userid
    Bye,
    Heinzelmännchen

    Kommentar


    • #3
      Ciao Heinzelmännchen,

      vielen Dank

      Leider klappt das auch nicht. Ich denke schon das Du es verstanden hast, die Logik ist richtig. Nur gibt es entweder einen Syntax Fehler nach:
      ..error SQL syntax near ' `user` SET

      oder wenn ich hinter UPDATE die Tabelle user wegnehme:
      Unknown column 'pics.owner_id' in 'where clause'
      sie ist aber definitiv vorhanden und tipfehler gibt es auch nicht, hab ich alles dreifach geprüft

      Vielleicht ist es noch wichtig zu erwähnen, dass das ganze unter MySQL läuft und das ich die Eingaben im Abfragefenster von phpMyAdmin 2.5.1 eingebe.

      Danke!
      André

      Kommentar


      • #4
        hmm,

        poste doch mal bitte nen tabellen-dump (nur struktur)
        Die Zeit hat ihre Kinder längst gefressen

        Kommentar


        • #5
          ähm...
          sorry, wie bereits geschrieben, ich bin anfänger. was muss ich eingeben um so eine struktur zu erhalten?

          Kommentar


          • #6
            hmm,

            du könntest im php_my_admin die tabelle auswählen, oben steht irgendwo 'export', dort nur struktur wählen ...
            Die Zeit hat ihre Kinder längst gefressen

            Kommentar


            • #7
              danke ich hoffe das ist richtig, ich habe die ganzen anderen felder mal vorsichtshalber dringelassen (user ist vb3, pics ist coppermine):

              \begin{table} > Tabelle "pics"
              \begin{longtable}{|c|c|c|c|}
              \hline \endhead \hline \endfoot \hline
              Feld & Typ & Null & Standard \\ \hline \hline
              pid & int(11) & Nein & \\ \hline
              aid & int(11) & Nein & 0 \\ \hline
              filepath & varchar(255) & Nein & \\ \hline
              owner\_id & int(11) & Nein & 0 \\ \hline
              title & varchar(255) & Nein & \\ \hline
              filesize & int(11) & Nein & 0 \\ \hline
              total\_filesize & int(11) & Nein & 0 \\ \hline
              pwidth & smallint(6) & Nein & 0 \\ \hline
              pheight & smallint(6) & Nein & 0 \\ \hline
              mtime & timestamp(14) & Ja & NULL \\ \hline
              owner\_name & varchar(40) & Nein & \\ \hline
              caption & text & Nein & \\ \hline
              keywords & varchar(255) & Nein & \\ \hline
              approved & enum('YES', 'NO') & Nein & YES \\ \hline
              ctime & int(11) & Nein & 0 \\ \hline
              filename & varchar(255) & Nein & \\ \hline
              votes & int(11) & Nein & 0 \\ \hline
              pic\_rating & int(11) & Nein & 0 \\ \hline
              hits & int(10) & Nein & 0 \\ \hline
              user1 & varchar(255) & Nein & \\ \hline
              user2 & varchar(255) & Nein & \\ \hline
              user3 & varchar(255) & Nein & \\ \hline
              user4 & varchar(255) & Nein & \\ \hline
              user5 & text & Nein & \\ \hline
              url\_prefix & tinyint(4) & Nein & 0 \\ \hline
              randpos & int(11) & Nein & 0 \\ \hline
              pic\_raw\_ip & tinytext & Ja & NULL \\ \hline
              pic\_hdr\_ip & tinytext & Ja & NULL \\ \hline
              \end{longtable} \end{table}

              %
              % Struktur
              %
              \begin{table} > Tabelle "user"
              \begin{longtable}{|c|c|c|c|}
              \hline \endhead \hline \endfoot \hline
              Feld & Typ & Null & Standard \\ \hline \hline
              userid & int(11) & Nein & \\ \hline
              usergroupid & smallint(5) & Nein & 0 \\ \hline
              username & varchar(50) & Nein & \\ \hline
              password & varchar(32) & Nein & \\ \hline
              email & varchar(50) & Nein & \\ \hline
              styleid & smallint(5) & Nein & 0 \\ \hline
              parentemail & varchar(50) & Nein & \\ \hline
              homepage & varchar(100) & Nein & \\ \hline
              icq & varchar(20) & Nein & \\ \hline
              aim & varchar(20) & Nein & \\ \hline
              yahoo & varchar(32) & Nein & \\ \hline
              usertitle & varchar(250) & Nein & \\ \hline
              customtitle & smallint(6) & Nein & 0 \\ \hline
              joindate & int(10) & Nein & 0 \\ \hline
              daysprune & smallint(6) & Nein & 0 \\ \hline
              lastvisit & int(10) & Nein & 0 \\ \hline
              lastactivity & int(10) & Nein & 0 \\ \hline
              lastpost & int(10) & Nein & 0 \\ \hline
              posts & int(10) & Nein & 0 \\ \hline
              timezoneoffset & varchar(4) & Nein & \\ \hline
              pmpopup & smallint(6) & Nein & 0 \\ \hline
              avatarid & smallint(6) & Nein & 0 \\ \hline
              options & int(10) & Nein & 0 \\ \hline
              birthday & varchar(10) & Nein & 0000-00-00 \\ \hline
              maxposts & smallint(6) & Nein & -1 \\ \hline
              startofweek & smallint(6) & Nein & 1 \\ \hline
              ipaddress & varchar(15) & Nein & \\ \hline
              referrerid & int(10) & Nein & 0 \\ \hline
              pmtotal & smallint(5) & Nein & 0 \\ \hline
              pmunread & smallint(5) & Nein & 0 \\ \hline
              passworddate & date & Nein & 0000-00-00 \\ \hline
              salt & char(3) & Nein & \\ \hline
              showvbcode & smallint(5) & Nein & 0 \\ \hline
              msn & varchar(100) & Nein & \\ \hline
              avatarrevision & int(10) & Nein & 0 \\ \hline
              membergroupids & varchar(250) & Nein & \\ \hline
              displaygroupid & smallint(5) & Nein & 0 \\ \hline
              reputation & smallint(6) & Nein & 10 \\ \hline
              reputationlevelid & int(10) & Nein & 1 \\ \hline
              languageid & smallint(5) & Nein & 0 \\ \hline
              threadedmode & smallint(5) & Nein & 0 \\ \hline
              emailstamp & int(10) & Nein & 0 \\ \hline
              autosubscribe & smallint(6) & Nein & -1 \\ \hline
              \end{longtable} \end{table}

              Kommentar


              • #8
                hmm,

                das ist nicht das, was ich erwartet habe ...

                wenn ich Heinzelmännchen query auf meine tabellen loslasse, scheint sie zu funktionieren ...

                poste bitte noch mal die query, die du nutzt ...

                hast du die `` um user selbst gesetzt (in der fehlermeldung sind se)? wenn nein, setze sie mal, vielleicht ist user nicht als table name erlaubt.

                mehr fällt mir auch nicht ein, aber es gibt ja noch genügend andere hier, irgendwer wird dich schon draufstoßen ... Heinzelmännchen wird ja auch nochmal reinschauen ...
                Die Zeit hat ihre Kinder längst gefressen

                Kommentar


                • #9
                  Hallo derHund

                  >das ist nicht das, was ich erwartet habe ...
                  Wie hätte das denn in etwa aussehen müssen, nur mal aus Interesse falls mich nochmal jemand nach so etwas fragt.

                  Ich habe die query in allen Variationen ausprobiert (mit Hochkomma und ohne, mit ";" am Ende und ohne sowie mit Leerzeichen und ohne):

                  UPDATE `pics`, `user` SET `pics`.`owner_name` = `user.username` WHERE `pics`.`owner_id` = `user`.`userid`;

                  Um das ein wenig einzuschränken habe ich mal eine einfache SELECT Abfrage gemacht. Also entweder bin ich komplett zu dusselig oder irgendwas stimmt mit der Tabelle nicht.

                  SELECT username FROM user WHERE userid = 3
                  funktioniert einwandfrei und als Ergebnis kommt "Martin" heraus.
                  drehe ich das ganze um, also:
                  SELECT userid FROM user WHERE username = `Martin`
                  (Alternativ habe ich auch LIKE probiert und Martin nicht in Hochkomma gesetzt)
                  kommt folgende Fehlermeldung:

                  Unknown column 'Martin' in 'where clause'

                  setze ich Martin in " " geht es (für mich wieder etwas neues) aber müsste dann nicht auch lauten: SET pics.owner_name = "user.username" (nur ´ne kleine Newbie-Frage zwischendurch.

                  Nach einigem herumprobieren habe ich folgendes herausgefunden:
                  1.) UPDATE tabelle1, tabelle2 ergibt bei mir immer ein Syntay Error, egal wie ich die Tabellen herumdrehe
                  2.) die erste Wert hinter dem WHERE wird immer als unknow bezeichnet.

                  a. Wenn ich
                  WHERE pics.owner_id = user.userid
                  eingebe erscheint unknow Unknown column 'pics.owner_id' in 'where clause' (auch wenn ich die tabelle nicht mit angebe erscheint es.

                  wenn ich es umdrehe zu:
                  WHERE user.userid = pictures.owner_id;
                  erscheint: Unknown table 'user' in where clause

                  Ich nutze MySQL 3.23.58

                  Danke
                  André

                  Kommentar


                  • #10
                    Nabend,

                    keine Ahnung so auf den ersten Blick warum das bei Dir nicht läuft.

                    Bei mir läuft das auch so wie ich es geschrieben habt. Bekomme von mysql Keine Fehlermeldung.

                    Was derHund wollte ist eigentlich ein Tabellen struktur. Geht bei phpmyAdmin über exportieren. Da solltest dann aber auch nur die Checkbox Struktur anhaben. Da Du sonst auch die Inserts mit bekommst.

                    Wenn Deine Tabellen aber so heißen wie in meinem SQL Statement, dann sollte es eigentlich auch gehen!

                    Bye,
                    Heinzelmännchen

                    Kommentar


                    • #11
                      danke
                      es liegt an meiner MySQL Version. UPDATE kann man da noch nicht über zwei Tabellen laufen lassen.

                      Gibt es noch einen anderen Weg oder habe ich jetzt die A-Karte.

                      Gruss
                      André

                      Kommentar


                      • #12
                        Gibt es noch einen anderen Weg oder habe ich jetzt die A-Karte.
                        das eigentlich nicht. notfalls mußt du nen umweg über php gehen. du kannst natürlich auch dein mysql updaten ...
                        Die Zeit hat ihre Kinder längst gefressen

                        Kommentar


                        • #13
                          Danke

                          >notfalls mußt du nen umweg über php gehen
                          Du bist gut, ich bekomme noch nicht mal solchen einfachen querys hin
                          Mein Job ist eher der content unserer Seite...

                          >du kannst natürlich auch dein mysql updaten
                          Das werde ich mal anfragen, aber so wie ich das vom letzten mal kenne wird irgendwas wieder umprogrammiert werden müssen (So war es das letzte oder vorletzte mal bei php oder MySQL so).

                          Jedenfalls vielen Dank für Eure Hilfe!

                          Gruss
                          André

                          Kommentar

                          Lädt...
                          X