2011-03-15 63 views
0

我有收集表單輸入並將其存儲到數據庫的要求。這很容易。困難的部分是我無法在長文本字段上創建唯一的密鑰。避免MySQL中重複的​​長文本條目的最佳方法

在這種情況下,通常會做些什麼來幫助防止用戶輸入重複條目?

謝謝, 亞歷克斯

+0

你試圖解決什麼問題?這是一個非常奇怪的要求。 – 2011-03-15 15:29:16

回答

3

修訂

直接的問題:

您應該創建一個額外的領域如本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讀物:

+0

是的,我知道那裏有文檔。但我問了一個直接的問題。 – Genadinik 2011-03-15 15:45:48

+0

humm,事實上直接的問題是在這兩個3d中。用示例更新 – 2011-03-15 15:47:24

+0

!並讓我知道。 – 2011-03-15 16:00:14

1

創建您長文本字段上的索引。然後在保存記錄之前,搜索用戶剛剛輸入的測試的現有記錄。如果找到了,請不要保存。

+0

在長文本條目上創建索引對性能不是很差勁嗎? – Genadinik 2011-03-15 15:46:54

+0

該索引將大大提高搜索重複的速度。它肯定會比全表掃描快得多。 – 2011-03-15 15:50:42

2

創建一個單獨的MD5哈希LONGTEXT條目的要在INSERTUPDATE觸發。該哈希列應該有一個UNIQUE密鑰,並且應該是CHAR類型(因爲它將始終是相同的大小)。這將允許唯一的密鑰。

+0

對不起,我完全不明白你的意思。什麼是md5散列?如何在插入/更新時觸發它?它如何與char列一起工作?非常神祕的答案。 – Genadinik 2011-03-15 15:45:09

+0

+1在任何情況下,這是一個有效的答案! ;) – 2011-03-15 16:03:12

0
$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!"; 
}