2012-07-24 49 views
0

我有一個數據庫表中包含的字段:搜索包含重複字段的行並刪除它們的Mysql查詢?

username, description, password. 

有時候,成員從一另一份說明,爲了節省時間

所以我有這樣的:

約翰 - 約翰的描述 - 約翰的密碼

Michael - John的描述 - 邁克爾的密碼

是否有mysql查詢搜索重複的字段條目並刪除它們? 如何在我們訪問時刪除整行數據?

+1

您不應將密碼存儲在數據庫中。 – 2012-07-24 23:11:17

+0

完全重複行或只是任何重複的字段? – Ryan 2012-07-24 23:11:39

+1

如果說明有意相同,該怎麼辦? – zerkms 2012-07-24 23:11:42

回答

0

創建一個新表,移動非重複條目,刪除舊錶並重新命名一個新表。

例子:

CREATE TABLE `new_table` as 
    SELECT * FROM `old_table` WHERE 1 GROUP BY [columns to remove duplicates by]; 

DROP TABLE `old_table`; 

RENAME TABLE `new_table` TO `old_table`; 

然而,這是很好的只是定期使用,並且它不檢查是否有任何重複。它只是將獨特的條目分組並將它們移動到另一個表格。當你想過濾你的條目時它很有用。


另一種方法是檢查這樣的:

SELECT `name` FROM `table` WHERE `description` LIKE '%descriptiontexthere%' 

然後,如果一些結果發現,這是一個重複的。
但是,有一個很大的缺點:用戶只能更改一個字母,查詢將失敗。
但是,通過將描述拆分爲數組可以避免(不完全)該缺點。例如,每隔100個字符分割一次,然後像上面的例子那樣檢查,但是有多個條件(例如description LIKE 'first100chars' OR description LIKE 'second100chars')。


第三種方法是將描述拆分爲單詞數組,然後選擇具有太​​多相同單詞的行。與X相同的單詞行可能是一個可能的重複。您可以根據輸入描述的長度設置閾值。

你永遠無法確定它是否重複,除非它是完全相同的條目。

+0

Ty非常適合回答,現在正在測試查詢。 – webmasters 2012-07-25 00:00:58

相關問題