MySQL: yazım farklılıkları arama nasıl?

9 Cevap php

Ben bu gibi aramak istiyorum: kullanıcı girişleri, örneğin "Murrays" ve arama sonucu "Murrays" ve "murray en" içeren kayıtları içeren iki kayıtları gösterecektir. Benim query.pl ne yapmalıyım?

9 Cevap

Hızlı ve kirli:

SELECT * FROM myTable WHERE REPLACE(name, '\'', '') = 'murrays'

Kesinlikle SQL bu sorguları yapmak gerekiyorsa, bu yardımcı olmaz, ancak bunun için bir Lucene arama endeksi ayarlayabilirsiniz eğer, siz "bulanık search" işlevsellik bu tür bir çok kazanç. Bu Lucene kendisi tarafından oldukça karmaşık bir konu olsa unutmayın.

Neler yapabileceğini ondan elimden tüm özel karakterler ile verileri içeren veritabanı, fazladan bir alan oluşturmak ve orada aramasıdır. Biraz topal, biliyorum. Akıllı yanıtları görmek için bekliyorum ;)

Ben ilk noktalama olmadan metin olan bir arama sütunu oluşturmak ve o arama olacaktır. Hesaplamalı yoğun operasyonlar her ikisi de: aksi takdirde karşı arama veya eşleştirme için PHP bireysel kayıtları kontrol etmek için düzenli ifadeler bir dizi olması etmiş olacak.

Belki böyle bir şey: (untested!)

SELECT * FROM users WHERE REPLACE(user_name, '\'', '') = "murrays"

Bu tek bir kelime aramak için ise, Soundex veya metaphone fonksiyonlarını kullanarak deneyebilirsiniz? Bu sesler gibi yanı sıra yazımı ele alabileceğinizi

MySQL bu varsa emin, ancak PHP (bu değerleri tutmak için ayrı sütun gerektirecektir) etmez.

Aksi takdirde, Richy hayır-noktalama ekstra kolon iyi görünüyor.

Bir bu gibi sorguya yerini eklemeyi deneyebilirsiniz

replace(name, '''','')

geçici maç için kesme kurtulmak için.

select name from nametable where name = replace(name,'''','');

Bu sorgu "Murrays" veya "murray en" almak gerekir.

var inputStr = "murrays";
inputStr = String.Replace("'", "\'", inputStr);
SELECT * FROM ATable WHERE Replace(AField, '\'', '') = inputStr OR AField = inputStr