Paco: Doppelte einträge in mysql-Datenbank verhindern

Hallo!
Ich möchte in eine mySQL-Tabelle schreiben, in der in jeder Spalte (außer dem Primärschlüssel natürlich) werte doppelt vorkommen können, sie sollen nur nicht in allen drei Spalten gleich sein. Bisher mach ich das so:

$query = "SELECT a, b, c FROM tabelle WHERE a = '$a' AND b = '$b' AND c = '$c' ";
$result = (mysql_query($query));
$anzahl = mysql_num_rows($result);
if($anzahl == 0 ) {
  $query = "INSERT INTO tabelle ( a, b, c ) VALUES ( '$a', '$b', '$c' )";
}

Mein Script funktioniert aber leider nicht wie es soll (einzelheiten spare ich an dieser stelle aus) und ich denke, dass es an diesem Konstrukt liegen muss. Gibt es ein SQL-statement, dass beim INSERT darauf prüft ob ALLE Einträge so schon in der Tabelle stehen?

Danke und liebe Grüße

Paco

  1. Gibt es ein SQL-statement, dass beim INSERT darauf prüft ob ALLE Einträge so schon in der Tabelle stehen?

    ggf hilft dir ON DUPLICATE KEY UPDATE

  2. Hi,

    Ich möchte in eine mySQL-Tabelle schreiben, in der in jeder Spalte (außer dem Primärschlüssel natürlich) werte doppelt vorkommen können, sie sollen nur nicht in allen drei Spalten gleich sein.

    leg einen Unique Index auf die drei Spalten.

    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. Hallo Cheatah,
      hatte ich, aber ich möchte ja nur Einträge verhindern, wo alle drei Spalten so schon vorhanden sind. Argh, Erklärlegastheniker..

      Tabelle:
      a b c
      d e f
      g h i

      Neuer Datensatz:
      a b d   -> ok
      d e g   -> ok
      g h i   -> bös!

      Kann man denn einen Index legen der sich auf drei Spalten gleichzeitig bezieht, also quasi "a b c" als Unique?

      leg einen Unique Index auf die drei Spalten.

      Cheatah

      1. Hi,

        Kann man denn einen Index legen der sich auf drei Spalten gleichzeitig bezieht, also quasi "a b c" als Unique?

        Genau das war doch Cheatahs Vorschlag:

        leg einen Unique Index auf die drei Spalten.

        MfG ChrisB

        --
        „This is the author's opinion, not necessarily that of Starbucks.“
      2. Hi,

        hatte ich, aber ich möchte ja nur Einträge verhindern, wo alle drei Spalten so schon vorhanden sind. Argh, Erklärlegastheniker..

        ja. Dann sollte auf diesen drei Spalten ein Unique Index liegen. Einer, nicht je einer.

        Kann man denn einen Index legen der sich auf drei Spalten gleichzeitig bezieht, also quasi "a b c" als Unique?

        Ja.

        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