Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

मैं स्वत:पूर्ण के लिए PHP के साथ MYSQL में कंपनी के नामों का एक अस्पष्ट मिलान कैसे करूं?

आप SOUNDEX() का उपयोग करके शुरुआत कर सकते हैं , यह संभवत:आपकी आवश्यकता के लिए करेगा (मैं पहले से मौजूद विकल्पों का एक ऑटो-सुझाव बॉक्स दिखाता हूं जो उपयोगकर्ता टाइप कर रहा है)।

SOUNDEX() . की कमियां हैं:

  • लंबे तारों में अंतर करने में असमर्थता। केवल पहले कुछ वर्णों को ध्यान में रखा जाता है, अंत में अलग होने वाले लंबे तार समान SOUNDEX मान उत्पन्न करते हैं
  • तथ्य यह है कि पहला अक्षर समान होना चाहिए या आपको आसानी से एक मैच नहीं मिलेगा। SQL सर्वर में आपको यह बताने के लिए DIFFERENCE() फ़ंक्शन है कि कितने दो SOUNDEX मान अलग हैं, लेकिन मुझे लगता है कि MySQL में उस तरह का कुछ भी नहीं बनाया गया है।
  • MySQL के लिए, कम से कम के अनुसार दस्तावेज़ , यूनिकोड इनपुट के लिए SOUNDEX टूटा हुआ है

उदाहरण:

SELECT SOUNDEX('Microsoft')
SELECT SOUNDEX('Microsift')
SELECT SOUNDEX('Microsift Corporation')
SELECT SOUNDEX('Microsift Subsidary')

/* all of these return 'M262' */

अधिक उन्नत आवश्यकताओं के लिए, मुझे लगता है कि आपको Levenshtein दूरी देखने की आवश्यकता है। (जिसे "दूरी संपादित करें" भी कहा जाता है) दो तारों की और एक सीमा के साथ काम करें। यह अधिक जटिल (=धीमा) समाधान है, लेकिन यह अधिक लचीलेपन की अनुमति देता है।

मुख्य दोष यह है कि उनके बीच की दूरी की गणना करने के लिए आपको दोनों तारों की आवश्यकता होती है। SOUNDEX के साथ आप अपनी तालिका में पूर्व-गणना किए गए SOUNDEX को संग्रहीत कर सकते हैं और उस पर तुलना/क्रमबद्ध/समूह/फ़िल्टर कर सकते हैं। Levenshtein दूरी के साथ, आप पा सकते हैं कि "Microsoft" और "Nzcrosoft" के बीच का अंतर केवल 2 है, लेकिन उस परिणाम पर आने में बहुत अधिक समय लगेगा।

किसी भी स्थिति में, MySQL के लिए Levenshtein दूरी फ़ंक्शन का एक उदाहरण codejanitor.com पर पाया जा सकता है:लेवेनशेटिन दूरी एक MySQL संग्रहीत कार्य के रूप में (10 फरवरी, 2007)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. UTC_TIMESTAMP () उदाहरण – MySQL

  2. CentOS 5 पर MySQL रिलेशनल डेटाबेस का उपयोग करें

  3. 'mysqldump' का उपयोग करके CSV प्रारूप में सभी तालिकाओं को डंप करें

  4. FIND_IN_SET () बनाम IN ()

  5. क्या MySQL में नेस्टेड लेनदेन की अनुमति है?