SELECT in einem INSERT

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

  • SELECT in einem INSERT

    Hallo zusammen,

    es geht um folgendes: Ich habe in meiner DB eine Spalte "Position". In dieser Spalte wird nummerisch die Position der einzelnen Einträge gespeichert, also in welcher Reihenfolge diese angezeigt werden sollen.

    Wenn jetzt ein neuer Eintrag gespeichert wird, muss logischerweise auch eine passende Position (MAX +1) eingetragen werden.

    Das Problem hierbei ist, dass es für jeden Eintrag ParentIDs gibt und je nach ParentID die Position anders aussieht. (Ein auto_inc fällt also weg)

    Daher muss ich zuerst die MAX-Position auslesen und dann wieder im Insert verwenden. Das mache ich über zwei verschiedene MySQL-Anfragen in php. Es geht aber bestimmt auch eleganter.

    Sowas in die Richtung:

    PHP-Code:
    INSERT INTO Datenbank (Titel,PositionVALUES("Test", (SELECT MAX(PositionFROM Datenbank WHERE PID=0)+1
    Wenn ich das direkt im phpMyAdmin ausführe, erhalte ich einen "SQL Syntax error".

    Wie genau müssen solche verschachtelten Anfragen aussehen?

    DANKE!!!
    strauberry

  • #2
    das ist doch ein subselect, das gibt es meines wissens erst ab mysql 4.1

    gruss
    peter
    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
    Meine Seite

    Kommentar


    • #3
      Ok

      Dann noch zwei Fragen dazu:

      a) Ist die Abfrage an sich korrekt?
      b) Ist das so performanter als wenn ich zwei normale Abfragen in PHP mache und eins dazuzähle?

      Danke!!

      Kommentar


      • #4
        Theoretisch geht sowas:

        INSERT INTO Datenbank (Titel,Position)
        SELECT "Test", MAX(Position)+1 FROM Datenbank WHERE PID=0

        Wobei Datenbank eigentlich Tabelle heissen müsste ... aber sowas begreifen hier die wenigsten ... !
        carpe noctem

        [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
        [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

        Kommentar


        • #5
          a) select max()+1 wäre wohl richtiger
          b) lese mal die syntax zu insert into select from
          Beantworte nie Threads mit mehr als 15 followups...
          Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

          Kommentar


          • #6
            das insert into ... habe ich mir mal angeschaut... das hat aber nicht funktioniert, weil es zweimal die gleiche Tabelle ist

            Bringt einen

            Not unique table/alias: 'Tabelle' (Dieses mal mit Tabelle )

            Datenbank war jetzt nur ein Platzhalter!! Das es eigentlich ne Tabelle ist, ist schon klar
            Zuletzt geändert von strauberry; 16.02.2005, 15:45.

            Kommentar


            • #7
              Kann ja keiner Wissen, dass Du 'ne MySQL < 4.0.14 einsetzt ... ab der geht's ... !
              carpe noctem

              [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
              [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

              Kommentar

              Lädt...
              X