2012-04-14 8 views
2

Ich versuche, eine Einschränkung in MySQL nach Mitglied, Datum und Frage hinzuzufügen, so dass derselbe Benutzer die gleiche Frage nicht mehr als einmal am Tag stellen kann.MySQL - versucht, einen eindeutigen Schlüssel in einem langen Textfeld zu erhalten

alter table questions add UNIQUE INDEX three_UNIQUE (member_id , question , date); 

aber da die Frage Feld Langtext ist, bekomme ich diesen Fehler:

ERROR 1071 (42000): Specified key was too long; max key length is 1000 bytes 

eine Möglichkeit, dies zu umgehen?

Danke !!

Antwort

2

Es ist normalerweise nicht sinnvoll, eine eindeutige Schlüsseleinschränkung für ein vom Benutzer eingegebenes Langtextfeld anzugeben. Der Benutzer kann die gleiche Frage mehr als einmal stellen, indem er einfach ein Leerzeichen hinzufügt oder eine andere kleine Änderung vornimmt.

Wenn Sie verhindern wollen, dass versehentliche Reposts verwenden, dann verwenden Sie ein verstecktes Feld mit einer GUID oder einem ähnlichen eindeutigen Bezeichner.

+0

ye meine Absicht ist es zu verhindern, es aus Versehen zu tun. Wie/wann erzeuge ich die GUID? – Genadinik

+0

@Genadinik: Sie können eine eindeutige ID auf dem Server (z. B. eine GUID) generieren und sie in das Formular als Typ "verborgen" hinzufügen. Wenn Sie das Postback erhalten, fügen Sie diesen Wert wieder in die Datenbank ein. Wenn das Formular zweimal gebucht wird, schlägt das zweite Mal fehl. –

+0

tolle, letzte Frage ... Was sollte der Datentyp in der Datenbank für die Guid sein? nur Varchar? – Genadinik

3

Sie könnten die Frage hashen und den Hash-Wert als Feld speichern. Da der Hashwert viel kleiner ist, können Sie eine Einschränkung hinzufügen. Aller Wahrscheinlichkeit nach werden keine zwei eindeutigen Fragen auf den gleichen Wert synchronisiert.

Hinweis: Sie haben die gleichen Probleme damit, als wenn die Fragen nur geringfügige Unterschiede hätten.

1

Fügen Sie eine neue Spalte für Hash hinzu (md5 oder was auch immer). Wenn die Frage gestellt wird, füllen Sie auch die Hash-Spalte. Verwenden Sie diese dann in Ihrem Index anstelle des Fragefelds.

Verwandte Themen