phil k. : Insert-Befehl wird falsch ausgeführt

Hi,
ich habe ein kleines Problem mit dem Eintrag in eine MySQL-Tabelle.
Meine insert-Befehle sehen so aus:

$result = @mysql_db_query($db, "INSERT INTO regie (Name, Bio)
          VALUES ('$Name', '$Bio')");
          $R_ID = mysql_insert_id();

$result = @mysql_db_query($db, "INSERT INTO filme (Titel, Darsteller,            Inhalt, Bild, Jahr, R_ID)
          VALUES ('$Titel', '$Darsteller', '$Inhalt', '$Bild', $Jahr',           '$R_ID')");
          $F_ID = mysql_insert_id();

Das Feld Name in der Tabelle 'Regie' habe ich noch als UNIQUE definiert, damit keine doppelten Einträge vorkommen können. Wenn der Name eines Regiseurs schon vorhanden ist, wird er also nicht mehr in die Tabelle 'regie' eingetragen. Das ist ok soweit. Nur wird die bereits existierende R_ID leider nicht in die Tabelle 'filme' übernommen. Wenn ein Regieseur neu eingetragen wird, wird alles richtig eingetragen. Wie kann ich es anstellen, dass eine bereits bestehen R_ID, anstatt einer 0 wie jetzt, in 'filme' übernommen wird?

Gruß
Phil

  1. Wie kann ich es anstellen, dass eine bereits bestehen R_ID, anstatt einer 0 wie jetzt, in 'filme' übernommen wird?

    Mal überlegen...Du könntest versuchen, sie aus einem Zylinder zu zaubern, aber da kommen meist nur weiße Karnickel raus. Trinkst Du Kaffee? Dann bietet sich Kaffeesatzleserei an. Eine andere Möglichkeit wäre, R_ID vorher auszulesen, aber das ist im Gegensatz zu den ersten beiden Vorschlägen unerhört aufwendig. Mmmh, vielleicht gab's ja mal R_ID-Bausatz in einem Yps-Heft?

    1. Eine andere Möglichkeit wäre, R_ID vorher auszulesen,

      Wie ich sehe hast Du mein Problem verstanden. Vielleicht könntest Du mir ja etwas auf die Sprünge helfen, falls dir, ob deines ausgeprägten Hanges zu blumigen Wortspielereien, noch etwas Zeit übrigbleibt.

      Gruß
      Phil

      --
      "Prophezeiungen sind schwierig, vor allem wenn sie die Zukunft  betreffen."
      -Shaw-
      1. hi,

        Wie ich sehe hast Du mein Problem verstanden. Vielleicht könntest Du mir ja etwas auf die Sprünge helfen

        na ja, die R_ID aus der regisseurs-tabelle auszulesen, bekommst du ja sicher hin (wenn du schon inserts machen kannst ;-)).

        du musst also nur noch ggf. prüfen, ob das insert erfolgreich war, oder nicht, weil datensatz schon vorhanden.

        dabei hilft dir mysql_affected_rows().

        gruß,
        wahsaga

        --
        "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
        1. na ja, die R_ID aus der regisseurs-tabelle auszulesen, bekommst du ja sicher hin (wenn du schon inserts machen kannst ;-)).

          Ja die R_ID kann ich auslesen. Mir ist nur noch nicht ganz klar wie ich Sie dann in die Tabelle 'filme' bekomme. Wie gesagt, wenn der Regiseur neu angelegt wird ist das kein Thema. Aber ich schaffe es nicht, dass die R_ID falls der Name mitsamt R_ID schon vorhanden ist, aus dem bereits vorhandenen Eintrag übernommen wird. Mach ich mich grad lächerlich? Oder seh ich den Wald vor lauter Bäumen nicht.

          Gruß
          Phil

          --
          "Prophezeiungen sind schwierig, vor allem wenn sie die Zukunft betreffen."
          -Shaw-
          1. hi,

            Ja die R_ID kann ich auslesen. Mir ist nur noch nicht ganz klar wie ich Sie dann in die Tabelle 'filme' bekomme.

            in der insert-query für diese tabelle hast du doch bereits $R_ID drin stehen.

            du musst also vorher nur noch diese variable mit dem vorher ausgelesenen wert belegen.

            Oder seh ich den Wald vor lauter Bäumen nicht.

            vermutlich ;-)

            gruß,
            wahsaga

            --
            "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
            1. du musst also vorher nur noch diese variable mit dem vorher ausgelesenen wert belegen.

              Ich glaube da liegt noch mein Problem. Also meine Select-Abfrage sieht so aus:
              $R_ID = mysql_query("SELECT R_ID FROM regie");
              Das führt aber leider noch immer nicht zum gewünschten Effekt. Muss ich noch eine WHERE-Bedingung einfügen?

              Gruß
              Phil

              --
              "Prophezeiungen sind schwierig, vor allem wenn sie die Zukunft betreffen."
              -Shaw-
              1. hi,

                Ich glaube da liegt noch mein Problem. Also meine Select-Abfrage sieht so aus:
                $R_ID = mysql_query("SELECT R_ID FROM regie");
                Das führt aber leider noch immer nicht zum gewünschten Effekt. Muss ich noch eine WHERE-Bedingung einfügen?

                wenn du _keine_ angibst, bekommst du natürlich die R_ID aus _allen_ datensätzen zurückgeliefert.

                du willst doch die zum eben eingefügten regisseurs-namen haben - da liegt doch wohl nichts näher, als eben diesen namen dann auch als WHERE-bedingung anzugeben, oder?

                btw: mach dir klar, dass mysql_query() nur eine ressource-id zurückliefert, die du dann noch auswerten musst. mit obigem code hast du nach der abfrage _nicht_ den wert aus dem datensatz in $R_ID stehen.
                ich würde vorschlagen, du knöpfst dir das PHP-manual bzgl. der mysql-funktionen noch mal vor ...

                gruß,
                wahsaga

                --
                "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
                1. du willst doch die zum eben eingefügten regisseurs-namen haben - da liegt doch wohl nichts näher, als eben diesen namen dann auch als WHERE-bedingung anzugeben, oder?

                  Ja schon, aber es ist ja nicht immer der so eben eingefügte Regiseur. Sonst könnte ich es ja mit Last insert id machen. Aber jetzt kann ich eh nicht mehr denken und muss ins Bett. Vielleicht nerv ich ja dann morgen nochmal weiter. ;-)

                  Gruß
                  Phil

                  --
                  "Prophezeiungen sind schwierig, vor allem wenn sie die Zukunft betreffen."
                  -Shaw-
                  1. hi,

                    Ja schon, aber es ist ja nicht immer der so eben eingefügte Regiseur.

                    aber es ist doch wohl immer die R_ID des jenigen regisseurs, dessen name dir in deinem script vorliegt, oder etwa nicht?

                    Sonst könnte ich es ja mit Last insert id machen.

                    darüber, dass das nicht funktioniert, wenn der regisseur nicht eingefügt wurde, wenn sein name schon in der DB steht, reden wir doch die ganze zeit (dachte ich zumindest).

                    also liest du dann mit SELECT die R_ID eben dieses regisseurs aus. seinen namen hast du ja vorliegen, schließlich hast du ja einen schritt vorher versucht, ihn in die DB einzufügen - so schnell kannst du ihn also nicht vergessen haben. und damit hast du doch das, was du für deine WHERE-klausel brauchst, um die richtige R_ID herauszufinden.

                    gruß,
                    wahsaga

                    --
                    "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
                    1. aber es ist doch wohl immer die R_ID des jenigen regisseurs, dessen name dir in deinem script vorliegt, oder etwa nicht?

                      Oh, ich glaub so langsam dämmert da was. Werd ich, wenn ich zuhause bin, gleich mal testen.
                      Danke!

                      Gruß
                      phil k.

                      1. Hallo zusammen,

                        jetzt hab ich das ganze mal so umgeschrieben:

                        $result = @mysql_db_query($db, "INSERT INTO regie (Name, Bio)
                                  VALUES ('$Name', '$Bio')");

                        if(!$result) $R_ID = @mysql_db_query($db, "SELECT id FROM regie WHERE Name = $Name");
                        else $R_ID = mysql_insert_id();

                        $result = @mysql_db_query($db, "INSERT INTO filme (Titel, Darsteller, Inhalt, Bild, Jahr, R_ID)  VALUES ('$Titel', '$Darsteller', '$Inhalt', '$Bild', $Jahr',  '$R_ID')");
                                  $F_ID = mysql_insert_id();

                        Dachte eigentlich, dass es so geht. Aber nix is. Ich glaub ich trag die id von Hand nach. Geht wohl schneller.

                        Gruß
                        Phil

                        --
                        "Prophezeiungen sind schwierig, vor allem wenn sie die Zukunft betreffen."
                        -Shaw-
                        1. hi,

                          if(!$result) $R_ID = @mysql_db_query($db, "SELECT id FROM regie WHERE Name = $Name");

                          ich habe in https://forum.selfhtml.org/?t=93699&m=566471 extra darauf hingewiesen, dass du so noch nicht den wert aus der DB-spalte in $R_ID stehen hast (bzw. hättest, wenn diese abfrage denn wie gewünscht funktionieren würde. wird sie aber ziemlich sicher nicht.)

                          gruß,
                          wahsaga

                          --
                          "Look, that's why there's rules, understand? So that you _think_ before you break 'em."