UNIQUE über mehrere Felder (Kombi)

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

  • UNIQUE über mehrere Felder (Kombi)

    Hi!

    Abraxax hatte letztens mal was erwähnt, dass man DB-Felder kombiniert als Unique definiern kann.

    Als simples Beispiel:

    Haustier | Farbe

    Hund | Braun
    Katze | Schwarz
    Maus | Grau
    Hund | Grau

    Es soll also möglich sein, mehrere Hunde, und auch mehrere Haustiere mit der gleichen Farbe zu haben. Nur ich will keine zwei schwarzen Katzen haben, weil das ist ja langweilig.

  • #2
    jetz bin ich hier ....
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar


    • #3
      Verarsch mich nicht!!!

      Kommentar


      • #4
        willst du jetzt den sql-query zum anlegen der tab haben?

        dein frage(?) ist dahingehend nicht eindeutig.
        INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


        Kommentar


        • #5
          Tschuldigung.

          Ist mir egal, ob du mir irgend einen demo-query gibst, oder nen link. oder myadmin.

          Kommentar


          • #6
            meinst du so ein mini-tut?

            Code:
            #
            # Table structure for table `MeineLustigenTierchen`
            #
            
            CREATE TABLE MeineLustigenTierchen (
              TierId int(11) NOT NULL auto_increment,
              TierName varchar(50) NOT NULL default '',
              TierFarbe varchar(50) NOT NULL default '',
              PRIMARY KEY  (TierId),
              UNIQUE KEY NameFarbe (TierName,TierFarbe)
            ) TYPE=MyISAM;
            
            #
            # Dumping data for table `MeineLustigenTierchen`
            #
            
            INSERT INTO MeineLustigenTierchen (TierName, TierFarbe) VALUES ('Hund', 'schwarz');
            INSERT INTO MeineLustigenTierchen (TierName, TierFarbe) VALUES ('Hund', 'weiss');
            INSERT INTO MeineLustigenTierchen (TierName, TierFarbe) VALUES ('Hund', 'bunt');
            INSERT INTO MeineLustigenTierchen (TierName, TierFarbe) VALUES ('Hund', 'rotlackiert');
            INSERT INTO MeineLustigenTierchen (TierName, TierFarbe) VALUES ('MeinHausFloh', 'schwarz');
            INSERT INTO MeineLustigenTierchen (TierName, TierFarbe) VALUES ('Katze', 'getiegert');
            INSERT INTO MeineLustigenTierchen (TierName, TierFarbe) VALUES ('Katze', 'schwarz');
            INSERT INTO MeineLustigenTierchen (TierName, TierFarbe) VALUES ('Katze', 'weiss');
            wenn man nun noch einen weisse katze einfügen will ....

            Code:
            INSERT INTO MeineLustigenTierchen (TierName, TierFarbe) VALUES ('Katze', 'weiss');
            .... bekommt man eine meldung von mysql.

            in phpMyAdmin steht dann z.b. Duplicate entry 'Katze-weiss' for key 2

            der mysql-code dafür ist 1062.


            man kann also immer brav einen insert machen. wenn was nicht stimmt,
            verlassen wir uns auf die DB. => 1062 heisst, dass eine keyverletzung
            aufgetreten ist.

            ---
            da phpmyadmin meines wissens keinen UNIQUE KEY über mehrere felder machen
            kann, muss man erst einmal die tabelle exportieren und den befehl manuell
            einsetzen. siehe oben.

            Code:
            UNIQUE KEY NameFarbe (TierName,TierFarbe)
            ^^^^^^^^^^ ^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^
            |||||||||| ||||||||| ||||||||||||||||||||
            |||||||||| ||||||||| ----------------------------- Hier kommen die Felder
            |||||||||| |||||||||                               rein, die zusammengenommen
            |||||||||| |||||||||                               EINDEUTIG sein sollen.
            |||||||||| |||||||||
            |||||||||| --------------------------------------- Hier wird der KEY-Name
            ||||||||||                                         definiert. Ein Keyname
            ||||||||||                                         kann sein was will. aber
            ||||||||||                                         er darf nur einmal pro
            ||||||||||                                         tabelle enthalten sein.
            ||||||||||
            -------------------------------------------------- schlüssel für UNIQUE KEY eben
            wer noch mehr lesen will, kann dies hier tun.
            INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


            Kommentar


            • #7
              Nee, was hast du dir da Mühe gegeben.

              Eigentlich hätte das UNIQUE KEY NameFarbe (TierName,TierFarbe) gereicht. Warum ich das nicht selbst versucht hatte, weiß der Geier.

              Danke!

              Kommentar


              • #8
                tja. so bin ich halt...

                jetzt bist DU aber dran die entsprechenden PHP-aktionen zu machen.
                also grade die fehlerbehandlung ... die brauche die user dann ja auch vernünftig erklärt.

                bin jetz erst mal weg.
                INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                Kommentar


                • #9
                  ps. suche mal den programmiererwitz....
                  tipp: bei den inserts.
                  INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                  Kommentar


                  • #10
                    Der Hausfloh

                    Bis zu den Inserts hatte ich gar nicht mehr gelesen, obwoh du dir so viel Mühe gemacht hast.

                    Kommentar


                    • #11
                      auch der. aber die zeile drüber ....
                      INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                      Kommentar


                      • #12
                        Jetzt wo dus sagst.

                        Hatte nach was tiefsinnigeren gesucht.

                        Nix für ungut! Ein klasse Witz!

                        Kommentar


                        • #13
                          was besseres war mir nicht eingefallen .....
                          INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                          Kommentar


                          • #14
                            Für die die noch wissen wollen, wies mit phpMyAdmin geht:

                            1) einen Unique Key auf das erste feld legen
                            2) Key "ändern"
                            3) neues Feld hinzufügen
                            4) Fertig!

                            Kommentar


                            • #15
                              Das klappt irgendwie nicht

                              Nachdem ich das Problem habe, habe ich versucht Eure Tipps umzusetzen.

                              username und domain sollen nur einmal vergeben werden können.
                              Aber ich bekomme dauernd ne Fehlermeldung. Auch der Tipp für PHPMyAdmin (2.0.4) hat nicht funktioniert.

                              [SQL]
                              CREATE TABLE news_tuwas (
                              id int(16) NOT NULL auto_increment,
                              username varchar(64) NOT NULL,
                              domain varchar(64) NOT NULL,
                              PRIMARY KEY (id)
                              UNIQUE KEY userdomain (username,domain)) ;
                              ([/SQL]

                              Vielleicht hat jemand einen Tipp. Ach ja, MySql Version auf dem Server 3.23.41.

                              Danke im voraus
                              Michael

                              Kommentar

                              Lädt...
                              X