Barney: insert

hy

wie kann ich bei einem insert überprüfen ob dieser eintrag schon in der table vorhenden ist??? wenn ja soll er nich noch einmal geinsertet werden sondern einfach übersprungen werden, sodass keine redundanzen entstehen.

mfg
Barney

  1. Hi,

    wie kann ich bei einem insert überprüfen ob dieser eintrag schon in der table vorhenden ist???

    füge dem DB-Schema ein entsprechendes Unique-Constraint hinzu.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. hy,

      hätt ich mir auch schon gedacht kann aber leider das schema nicht verändern. gibts eine andere möglichkeit möglichst ohne die table vorher auszulesen?

      mfg
      Barney

      1. Hi,

        hätt ich mir auch schon gedacht kann aber leider das schema nicht verändern.

        Dann ist die Datenbankstruktur, gelinde gesagt, ungünstig gewählt. Wenn keine doppelten Einträge erwünscht/erlaubt sind, ist das durch eine entsprechende Datenbankstruktur sicherzustellen.

        Du nimmst ja auch keinen Anker mit ins Auto, weil die Bremsen nicht funktionieren :D

        gibts eine andere möglichkeit

        Ja.

        möglichst ohne die table vorher auszulesen?

        Nein.
        Bzw. du versuchst ein Update, und wenn es fehlschlägt, ist der Eintrag nicht vorhanden.
        Aber glaub mir, das willst du nicht wirklich ;)

      2. Nachtrag:

        kann aber leider das schema nicht verändern.

        Kannst du nicht oder darfst du nicht?
        Im Normalfall darfst du mit PHP durchaus ein ALTER TABLE machen, und somit ist es kein Problem, die Struktur zu ändern ohne direkten Zugriff auf die Tabelle.

        Wie gesagt, die richtige Methode ist die Änderung der Datenbankstruktur, alles andere ist Flickschusterei

        1. Kannst du nicht oder darfst du nicht?
          Im Normalfall darfst du mit PHP durchaus ein ALTER TABLE machen, und somit ist es kein Problem, die Struktur zu ändern ohne direkten Zugriff auf die Tabelle.

          Könnte schon aber das problem ist, dass da noch einige ander Programme mit dieser Table arbeiten die nicht von mir sind und dadurch würde mann alles andere auch ändern müssen dadurch fällt diese Lösung eindeutig aus.

          mfg

          1. Hallo,

            Könnte schon aber das problem ist, dass da noch einige ander Programme mit dieser Table arbeiten die nicht von mir sind und dadurch würde mann alles andere auch ändern müssen dadurch fällt diese Lösung eindeutig aus.

            Das heisst, dann aber auch, dass, obwohl Du es dann irgendwie schaffts, keine falschen Daten in diese Tabelle zu schreiben, nicht davon ausgehen kannst, dass auch keine falschen Daten in der Tabelle sind, da ja die anderen Programme Mist bauen können/werden.

            Gerade wenn mehhr als ein Progarmm auf die selbe Datenstruktur zugreift, ist es noch viel wichtiger, dass die Datenbank selbst weitgehenst in der Lage ist, fehlerhafte Daten auszuschliessen.
            Der einzig sinnvolle Weg ist der von Cheatah vorgeschlagene. Füge einen passenden Constraint hinzu und korrigiere die (potentiell) fehlerhaften Programme. Eine wirkliche Alternative dazu gibt es nicht.

            Grüße
              Klaus

          2. Hi,

            Könnte schon aber das problem ist, dass da noch einige ander Programme mit dieser Table arbeiten die nicht von mir sind und dadurch würde mann alles andere auch ändern müssen dadurch fällt diese Lösung eindeutig aus.

            1. Wie kannst du dann sicherstellen, das keine doppelten Einträge vorhanden sind?
            2. seit wann juckt es die Software, ob eine Spalte "Unique" ist, wenn es sowieso keine doppelten Einträge geben darf?

            Also irgendwo ist das ganze System von Grundauf schrott von der Planung aufwärts. Da kannste dir auch die Prüfung sparen, ob deine Daten nicht doppelt sind.

        2. Hi,

          was auch evt. nicht geht (Unique Constraint auf Spalte(n) setzen), da vielleicht schon Redundanzen drin sind.

          Frank

  2. Hi Barney,

    wie kann ich bei einem insert überprüfen ob dieser eintrag schon in der table vorhenden ist??? wenn ja soll er nich noch einmal geinsertet werden sondern einfach übersprungen werden, sodass keine redundanzen entstehen.

    versuche es mal damit:
    http://dev.mysql.com/doc/mysql/en/insert.html

    INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
        [INTO] tbl_name [(col_name,...)]
        VALUES ({expr | DEFAULT},...),(...),...
        [ ON DUPLICATE KEY UPDATE col_name=expr, ... ]

    klingt doch gut, oder?

    ciao
    romy