Ankündigung

Einklappen
Keine Ankündigung bisher.

Unique-Befehl

Einklappen

Neue Werbung 2019

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

  • Unique-Befehl

    Hi Leute,

    ich habe folgendes Problem ich habe eine Tabelle "video":

    Code:
    CREATE TABLE IF NOT EXISTS `video` (
      `id` int(255) NOT NULL AUTO_INCREMENT,
      `username` varchar(255) CHARACTER SET utf8 NOT NULL,
      `thumbnail` varchar(255) NOT NULL,
      `link` varchar(255) NOT NULL,
      `xPos` float NOT NULL,
      `yPos` float NOT NULL,
      `resHeight` float NOT NULL,
      `resWidth` float NOT NULL,
      PRIMARY KEY (`id`)
    )
    Nun will ich das zu einem Username nur 1 mal jeder "link" in die Datenbank gespeichert wird. Funktioniert das überhaupt in SQL oder benötige ich dazu PHP und es in PHP zu überprüfen ob es schon vorhanden ist und wenn ja nicht mehr hinein speichern usw.?

    lg Blackscreen


  • #2
    UNIQUE_KEY über username und link?
    Zitat von nikosch
    Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

    Kommentar


    • #3
      Zitat von tkausl Beitrag anzeigen
      UNIQUE_KEY über username und link?
      dann kann ich ja nur 1 username + 1 link hinein speichern

      Kommentar


      • #4
        Zitat von Blackscr33n Beitrag anzeigen
        dann kann ich ja nur 1 username + 1 link hinein speichern
        Nein. Das heißt dass die Kombination aus User + Link eindeutig sein muss.

        Ist deiner Meinung nach

        Code:
        user1link1
        identisch zu

        Code:
        user1link2
        ? Nein? Eben.
        Lerne Grundlagen | Schreibe gute Beispiele | PDO > mysqli > mysql | Versuch nicht, das Rad neu zu erfinden | Warum $foo[bar] böse ist | SQL Injections | Hashes sind keine Verschlüsselungen! | Dein E-Mail Regex ist falsch

        Kommentar


        • #5
          okey gut, wusste ich nicht danke.
          dachte die werden seperat gezählt und nicht zusammen

          Kommentar


          • #6
            Zitat von tkausl Beitrag anzeigen
            UNIQUE_KEY über username und link?
            Platzsparender wäre dies:

            Code:
            test=*# create table video (username varchar(255), link varchar(255));
            CREATE TABLE
            Time: 48,404 ms
            test=*# create unique index idx_user_link on video(md5(username),md5(link));
            CREATE INDEX
            Time: 18,172 ms
            Es ist ja nicht nötig, den Index so aufzublähen, oder?
            PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

            Kommentar


            • #7
              Also ich habe mal das gemacht wie akretschmer es gesagt hat und jetzt habe ich mal den code versucht auszuführen:

              Code:
              INSERT INTO `video`(`id`, `username`, `thumbnail`, `link`, `xPos`, `yPos`, `resHeight`, `resWidth`) VALUES (NULL,"Bernhard","http://www.youtube.com/embed/zss1EHSuT1A?rel=0&autoplay=1","http://www.youtube.com/embed/zss1EHSuT1A?rel=0&autoplay=1",1,1,1,1)
              und es gibt bereits einen datensatz mit dem username test und dem gleichen Link.
              Dies sollte ja dann laut euch funktionieren oder?
              Tut es aber nicht :S

              Code:
              #1062 - Duplicate entry 'http://www.youtube.com/embed/zss1EHSuT1A?rel=0&autoplay=1' for key 'link'

              Kommentar


              • #8
                Dann hast du den Key falsch gesetzt.
                Zitat von nikosch
                Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

                Kommentar


                • #9
                  Zitat von tkausl Beitrag anzeigen
                  Dann hast du den Key falsch gesetzt.
                  Oder die falsche Datenbank. Soweit ich weiß, kann MySQL keine funktionalen Indexe.
                  PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

                  Kommentar


                  • #10
                    Zitat von akretschmer Beitrag anzeigen
                    Oder die falsche Datenbank. Soweit ich weiß, kann MySQL keine funktionalen Indexe.
                    Code:
                    test=*# create table video (username varchar(255), link varchar(255));
                    CREATE TABLE
                    Time: 48,404 ms
                    test=*# create unique index idx_user_link on video(md5(username),md5(link));
                    CREATE INDEX
                    Time: 18,172 ms
                    test=*# insert into video values ('person1','link1');
                    INSERT 0 1
                    Time: 0,661 ms
                    test=*# insert into video values ('person1','link2');
                    INSERT 0 1
                    Time: 0,284 ms
                    test=*# insert into video values ('person1','link2');
                    ERROR:  duplicate key value violates unique constraint "idx_user_link"
                    DETAIL:  Key (md5(username::text), md5(link::text))=(25bf0679e0760ca3ea963b58df09357b, 85ac0bad0478698a2a2da24486fb2dcb) already exists.
                    Time: 0,464 ms
                    PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

                    Kommentar


                    • #11
                      Zitat von akretschmer Beitrag anzeigen
                      Platzsparender wäre dies:

                      Es ist ja nicht nötig, den Index so aufzublähen, oder?
                      Kannst du noch kurz sagen, wo genau der Unterschied liegt?
                      You know, my wife sometimes looks at me strangely. „Duncan“, she says, „there's more to life than Solaris“. Frankly, it's like she speaks another language. I mean, the words make sense individually, but put them together and it's complete nonsense.

                      Kommentar


                      • #12
                        Zitat von chorn Beitrag anzeigen
                        Kannst du noch kurz sagen, wo genau der Unterschied liegt?
                        In der Länge. 255 Zeichen ist a bissl kürzer als ein md5 -Hash mit 32 Zeichen Länge. Kürzerer Index -> weniger Platz auf Pladde -> schnellerer Zugriff.
                        PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

                        Kommentar


                        • #13
                          Zitat von akretschmer Beitrag anzeigen
                          In der Länge. 255 Zeichen ist a bissl kürzer als ein md5 -Hash mit 32 Zeichen Länge. Kürzerer Index -> weniger Platz auf Pladde -> schnellerer Zugriff.
                          In dem Fall könnte man sogar den index auf md5(verkettung beider Spalten) legen - nochmals 32 Byte gespart.
                          PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

                          Kommentar


                          • #14
                            Zitat von akretschmer Beitrag anzeigen
                            Oder die falsche Datenbank. Soweit ich weiß, kann MySQL keine funktionalen Indexe.
                            http://dev.mysql.com/doc/refman/5.5/...tree-hash.html
                            Standards - Best Practices - AwesomePHP - Guideline für WebApps

                            Kommentar

                            Lädt...
                            X