2016-10-16 78 views
0

在我的數據庫我有品牌名稱的表,我需要把它清理乾淨 ,因爲我有一些重複的像MYSQL/PHP如何找到以同一個單詞開始的所有行?

Yadda

Yadda &聯合

Yadda工程

哪些是同一品牌,但多次輸入錯誤儘管列是獨特的

如何處理這個?這隻能在mysql查詢中完成嗎?

感謝

+0

取決於項目如何比扎羅是所謂的匹配。 – Drew

+0

你有公司「美國通用」和「美國標準」,你想以神奇的方式處理所有這些權利。祝一切順利。 – Drew

+0

這個問題的最佳解決方案是避免品牌名稱的重複。 U可以使用html中的select選項列出可能的品牌。 (有點難以找到並列出所有品牌) – jophab

回答

0

您可以使用SUBSTR

假設你行的話「Yadda」開頭的,你可以

select * from my_table 
where substr(my_column, 1, length('Yadda')) = 'Yadda'); 

然後,如果你需要刪除,你可以(假設不當行你想要保存行'Yadda & Co'你可以

delete from my_table 
where substr(substr(my_column, 1, length('Yadda')) = 'Yadda') 
and my_column <> 'Yadda & Co'; 

或美國

delete from my_table 
where substr(substr(my_column, 1, length('American')) = 'American') 
and my_column not in ('American Standard', 'American Airlines'); 
+1

他的問題不在於Yadda – Drew

+0

@Drew。標題說..行,以相同的單詞開始..無論如何..答案更新。簡短的解釋 – scaisEdge

+0

是的,這是我想用的東西。但如何迭代每行(我有成千上萬).. shoudl我使用for循環在PHP? – Francesco

0

SELECT Name FROM Table WHERE Name REGEXP '^[Y].*$'

在這個正則表達式表示正則表達式

這是T-SQL

SELECT Name FROM Table WHERE Name LIKE '[Y]%'

1

我的報價第一爲搜索欄創建全文索引。 完整文本分數後,您可以確定字符串的相似性。 刪除它們,除非它們的分數高於閾值。

DELETE FROM table_name 
WHERE 
    id <> (SELECT id FROM table_name ORDER BY MATCH (title) AGAINST ('Yada' IN NATURAL LANGUAGE MODE) DESC LIMIT 0,1) AND 
    MATCH (title) AGAINST ('Yada' IN NATURAL LANGUAGE MODE) < threshold 

而且不是關閉全文可以在這個答案使用levenshtein功能(具有相同的邏輯SQL查詢) how to compute similarity between two strings in MYSQL

+0

答案是否解決了您的問題? –

相關問題