Mike: mySQL: Wert xy in Tabelle vorhanden? Wenn nein => eintragen

Hallo,

ich habe eine Frage und zwar habe ich eine Tabelle zum Beispiel mit der Spalte "Interpret".

Und wenn jetzt jemand die Seite aufruft, wird $interpret angezeigt (die Info für diese Variable kommt aus einer externen Quelle). Es soll nun automatisch beim Seitenaufruf überprüft werden, ob eben dieser Interpret ($interpret) schon in der Tabelle vorhanden ist oder nicht. Wenn nicht, soll er zugefügt werden.

Gibt's dafür eine "elegante" Methode? Die einzige, die mir einfällt wäre folgende:

<hier eine Datenbank-Abfrage mit while-Schleife... das Ergebnis wird in $row geschrieben>

if($interpret == $row['interpret']) {
echo "nicht zufügen, da schon vorhanden";
} else {
echo "zufügen, da noch nicht vorhanden";
}

Aber das kanns doch nicht sein oder? Irgendwie hab ich das Gefühl, dass es so auch gar nicht funktionieren kann, da eine while-Schleife ja bedeutet, dass er das ganze für jeden Eintrag durchführt. sind also 50 Einträge vorhanden und davon sind 30 != $interpret, würde er ihn 30 mal zufügen, richtig?

Grüsse
Mike

PS: Hoffe, es ist nicht zu verwirrend...

  1. moin
    lass den interpreten doch einfach in der DB suchen
    wenn du kein ergebnis bekommst, ist er nich vorhanden und du kannst ihn hinzufügen

    gruß

    1. Hallo,

      die elegante methode heißt:

      1. sichersrtellen, dass die Interpreten immer richtig geschrieben werden.
      2. Einen Unique-Index auf das Feld Interpret legen
      3. Den Interpreten einfach mit insert into eintragen
      4. Den mysql_error() abfragen, ob es es geklappt hat.

      Wenn es nicht geklappt hat und in mysql_errno() die Nummer für Duplicate Key drinsteht für den entsprechenden Schlüssel, dann war er eben schon da.

      Ist das elegant genug?

      Liebe Grüße aus http://www.braunschweig.de

      Tom

      --
      Intelligenz ist die Fähigkeit, aus Fehlern Anderer zu lernen und Mut die, eigene zu machen.
      1. moin

        das geht natürlich auch, aber als eleganter würd ich das imho nicht bezeichnen

        gruß

        1. Hallo,

          das geht natürlich auch, aber als eleganter würd ich das imho nicht bezeichnen

          Ob Du das für eleganter hältst, ist mir vollkommen wurscht *ggg*

          Als "elegant" gilt, was billig bleibt. Meine Methode ist billiger als Deine, da sie nur ein einziges Query erfordert, während Deine ein Select UND ein Insert erfordert.

          Die Auswertung der Fehlermeldung, ob es denn schlußendlich geklappt hat, musst Du trotzdem noch vornehmen.

          Praktischer wäre es allerdings für die Programmierung von Dialogverfahren, Deine Methode zu nutzen nund sie noch zu verbessern:

          1. Eingabe des genauen neunen Namens
          2. Genaue Suche
          3. Wenn gefunden, Anzeige und Entscheidung des Users, ob er's ist.
          4. Wenn nicht gefunden, ungefähre Suche (über Soundex) und Anzeige der Liste der Treffer.
          5. Nur, wenn der User entscheidet, dass er nicht dabei ist, per Userentscheidung den Neueintrag vornehmen lassen.

          Nur so (oder noch komplexer) kann man Doubletten vermeiden.

          Die "eleganten" Methoden sind keinesfalls immer die besten.

          Liebe Grüße aus http://www.braunschweig.de

          Tom

          --
          Intelligenz ist die Fähigkeit, aus Fehlern Anderer zu lernen und Mut die, eigene zu machen.