Лучший способ избежать дублирования длинных текстовых записей в MySQL - PullRequest
0 голосов
/ 15 марта 2011

У меня есть требование собрать данные формы и сохранить их в базе данных. Это довольно легко. Сложность в том, что я не могу сделать уникальный ключ в длинном текстовом поле.

В такой ситуации, что обычно делается для предотвращения ввода дубликатов пользователями?

Спасибо, Alex

Ответы [ 4 ]

4 голосов
/ 15 марта 2011

ОБНОВЛЕНО

Прямой вопрос:

Вам необходимо создать дополнительное поле, как в этом примере

myId int(11) NOT NULL AUTO_INCREMENT,
myText TEXT,
myUnique VARCHAR(255) NOT NULL DEFAULT '0',
UNIQUE KEY myUnique (myUnique)

<form>
<textarea name="myText" ></textarea>
<input type="hidden" value="UNIQUE-ID" name="myUnique" />
</form>

ПРИМЕЧАНИЕ:

ПРИМЕР:

$myUnique = crc32("The quick brown fox jumped over the lazy dog.");

Дальнейшие ТА:

3 голосов
/ 15 марта 2011

Создайте отдельный хэш MD5 для записи LONGTEXT, который будет запускаться на INSERT и UPDATE.Этот хеш-столбец должен иметь ключ UNIQUE и тип CHAR (так как он всегда будет одного размера).Это позволит получить уникальный ключ.

1 голос
/ 15 марта 2011

Создайте индекс для вашего длинного текстового поля.Затем, перед сохранением записи, найдите в существующих записях тест, который пользователь только что ввел.Если найдено, не разрешайте сохранение.

0 голосов
/ 26 декабря 2012
 $text='the long text to be inserted the long text to be inserted the long text to be inserted the long text to be inserted';
 //assuming field name (mylongtextfield)
 $result=mysql_query("SELECT id FROM mytable WHERE md5(mylongtextfield)='".md5($text)."'";
 if(!$result){
      //do your insert query
 }else{
      echo "the text already exist!";   
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...