我有收集表單輸入並將其存儲到數據庫的要求。這很容易。困難的部分是我無法在長文本字段上創建唯一的密鑰。避免MySQL中重複的長文本條目的最佳方法
在這種情況下,通常會做些什麼來幫助防止用戶輸入重複條目?
謝謝, 亞歷克斯
我有收集表單輸入並將其存儲到數據庫的要求。這很容易。困難的部分是我無法在長文本字段上創建唯一的密鑰。避免MySQL中重複的長文本條目的最佳方法
在這種情況下,通常會做些什麼來幫助防止用戶輸入重複條目?
謝謝, 亞歷克斯
修訂
直接的問題:
您應該創建一個額外的領域如本eaxmple
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.");
此外SO讀物:
是的,我知道那裏有文檔。但我問了一個直接的問題。 – Genadinik 2011-03-15 15:45:48
humm,事實上直接的問題是在這兩個3d中。用示例更新 – 2011-03-15 15:47:24
!並讓我知道。 – 2011-03-15 16:00:14
創建您長文本字段上的索引。然後在保存記錄之前,搜索用戶剛剛輸入的測試的現有記錄。如果找到了,請不要保存。
在長文本條目上創建索引對性能不是很差勁嗎? – Genadinik 2011-03-15 15:46:54
該索引將大大提高搜索重複的速度。它肯定會比全表掃描快得多。 – 2011-03-15 15:50:42
創建一個單獨的MD5
哈希LONGTEXT
條目的要在INSERT
和UPDATE
觸發。該哈希列應該有一個UNIQUE
密鑰,並且應該是CHAR
類型(因爲它將始終是相同的大小)。這將允許唯一的密鑰。
對不起,我完全不明白你的意思。什麼是md5散列?如何在插入/更新時觸發它?它如何與char列一起工作?非常神祕的答案。 – Genadinik 2011-03-15 15:45:09
+1在任何情況下,這是一個有效的答案! ;) – 2011-03-15 16:03:12
$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!";
}
你試圖解決什麼問題?這是一個非常奇怪的要求。 – 2011-03-15 15:29:16