2012-08-28 33 views
0

解決方案! 我做了@pilcrow建議的事情。查找了mysql_error_num:1062(唯一的電子郵件地址),並返回了錯誤。獨特的電子郵件查找方法

說明:

我建立,需要許多不同的用戶,並可能通過公司註冊表格註冊的應用程序。我想確保個人輸入的電子郵件是唯一的,因爲公司可能會向許多用戶發送通用的[email protected]電子郵件。

我想能夠檢查數據庫,看看是否存在電子郵件。

問題:

我已經知道如何通過JavascriptajaxPHP做到這一點,但我怕,如果我有很多用戶(千),查詢是要採取永遠。特別是如果我決定在表單上使用keypress事件而不是blur事件。我可能是錯的,但我看不到一個簡單的WHERE email = $email是非常可擴展的。

問題

有沒有一種方法,我可以建立我的代碼或數據庫(MySQL的),以加快查詢?我正在考慮爲電子郵件設置一個單獨的表格,但不要認爲這會起作用。

謝謝!

p.s.我對數據庫/服務器技術非常感興趣,所以PHP + MYSQL就是這樣。

+0

在keydown上設置超時時間,以便只在用戶未輸入x秒內的任何內容時才運行ajax請求。 –

+0

這是一個好主意,但即使這樣也會變得緩慢 – Phil

回答

1

你問

有沒有一種方法,我可以建立我的代碼或數據庫(MySQL的),以加快查詢?

是的,完全省略查詢。

對存儲在您的後端數據庫中的電子郵件地址設置UNIQUE約束,然後在因新電子郵件地址的重複而導致新帳戶的插入失敗時準備捕獲ER_DUP_UNIQUE

該方法可防止重複並在選擇副本時警告新用戶。

我非常懷疑你需要查找電子郵件地址,因爲他們正在鍵入(「...如果我決定使用keypress事件...」)。如果你確實想在INSERT之前檢查地址是否存在,你還需要一個事務來防止TOCTOU鬧劇。但是,由於UNIQUE約束是對付重複的最簡單但最有效的防禦措施,只需實現該約束即可。

+0

這實際上是個好主意。問題是,我使用的是CodeIgniter,可能無法選擇特定的問題。我會研究它並相應地更新問題,謝謝! – Phil

+0

@菲爾,不客氣。如果您覺得它有用,請加快速度。 – pilcrow

1

你的問題對你要存儲在數據庫中的東西比較模糊。單獨的電子郵件表的缺點是什麼?

你真正需要的,不僅僅是一張表,它是電子郵件的索引。底層表可能只是電子郵件,或者可能有其他用戶信息。但是,如果執行如下查詢:

select email 
from t 
where email = <your email to check> 
limit 1 

然後查詢將使用索引高效地進行匹配。

+0

我並不是說有一個缺點,但我只是認爲這是不必要的,實現一個僅限電子郵件的表是否有意義?就'索引'而言,你可能會詳細說明一下嗎?我現在要谷歌它 – Phil

+0

@ phil。 。 。索引是數據庫用來使查詢運行更快的數據結構。在這種情況下,他們將極大地縮短查找重複電子郵件所需的時間。這個話題非常廣泛。 Google和維基百科都有關於這個主題的信息,數據庫文檔也是如此。 –

相關問題