Ошибка произошла здесь из-за использования одинарных кавычек ('
). Вы можете поместить свой запрос следующим образом:
mysql_query("
SELECT * FROM Users
WHERE UserName
LIKE '".mysql_real_escape_string ($username)."'
");
Он использует mysql_real_escape_string
для предотвращения SQL-инъекции. Хотя мы должны использовать расширение MySQLi или PDO_MYSQL для обновленной версии PHP (PHP 5.5.0 и более поздних версий), но для более старых версий mysql_real_escape_string
это будет трюк.
Приблизительное сопоставление строк не является хорошей идеей, так как неправильное совпадение приведет к аннулированию всего анализа. Если имена из каждого источника одинаковы каждый раз, то для меня лучше всего подходят и индексы построения. Это легко сделать в R:
Предположим, что у вас есть данные:
a<-data.frame(name=c('Ace','Bayes'),price=c(10,13))
b<-data.frame(name=c('Ace Co.','Bayes Inc.'),qty=c(9,99))
Создайте индекс имен для каждого источника один раз, возможно, используя pmatch и т. Д. В качестве отправной точки и затем проверять вручную.
a.idx<-data.frame(name=c('Ace','Bayes'),idx=c(1,2))
b.idx<-data.frame(name=c('Ace Co.','Bayes Inc.'), idx=c(1,2))
Затем для каждого слияния с использованием:
a.rich<-merge(a,a.idx,by="name")
b.rich<-merge(b,b.idx,by="name")
merge(a.rich,b.rich,by="idx")
Это даст нам:
idx name.x price name.y qty
1 1 Ace 10 Ace Co. 9
2 2 Bayes 13 Bayes Inc. 99
Я также местный представитель Канады, признаю имена фондов.
Это сложно, так как каждый из поставщиков данных выбирает свою собственную форму для имен отдельных фондов. Некоторые используют разную структуру, как и весь конец либо в Фонде, либо в других классах. Кажется, что каждый выбирает свои собственные короткие формы, и они регулярно меняются.
Вот почему так много людей, как вы, делаете это вручную на регулярной основе. Некоторые из консалтинговых фирм перечисляют индексы для ссылки на различные источники, не уверены, изучили ли вы этот маршрут?
Как сказал Шейн и Марек, это совпадающая задача больше, чем прямое соединение. Многие компании борются с этим. Я в середине своей работы над этим ...
Jay
Одно быстрое предложение: попробуйте выполнить некоторое сопоставление по разным полям отдельно, прежде чем использовать слияние. Самый простой подход - с функцией pmatch
, хотя R не имеет недостатка в функциях согласования текста (например, agrep
). Вот простой пример:
pmatch(c("med", "mod"), c("mean", "median", "mode"))
Для вашего набора данных это соответствует всем именам фонда из a
:
> nrow(merge(a,b,x.by="Fund.Name", y.by="Fund.name"))
[1] 58
> length(which(!is.na(pmatch(a$Fund.Name, b$Fund.name))))
[1] 238
. После создания совпадений вы можете легко объединить они вместе используют их.
Настоятельно рекомендуется использовать пакет dgrtwo / fuzzyjoin .
stringdist_inner_join(a,b, by="Fund.Name")