2013-03-02 2 views
0

У меня есть таблица со столбцом "company_name". Теперь с некоторыми сторонними приложениями я получаю короткие строки следующим образом: Кто-то отправил элемент в «stack-exchange».Найти строки в тексте

Я хочу найти строку со столбцом столбцов столбцов столбцов из строки. (Другими словами, я хочу, чтобы оператор работал наоборот). Как это сделать?

EDIT: Как проверить, соответствует ли какое-либо из значений company_name вашей таблицы части строки, которую я получаю?

+0

Почему у этого вопроса есть тег [tag: postgresql], в то время как принятый ответ работает с MySQL? .. – vyegorov

+0

Я легко смог воспроизвести его в Postgres, также его в PHP не в SQL :) Но он дал мне общую идею. – ewooycom

ответ

0

Редактировать: Поскольку вы не можете определить, какая часть входной строки является именем компании, вам необходимо проверить существующие значения для имени_компании в таблице на строку. Например, в PHP:

$input = 'Somebody has sent item to "stack-exchange"'; 
$result = mysql_query('SELECT company_name FROM table'); 
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { 
    if strpos($input, $row['company_name']) === False { 
     print "Company name is not in this row!" /* Substitute whatever action you want here */ 
    } else { 
     print "Company name is in this row!" /* Substitute whatever action you want here */ 
    } 
} 

Работа с пользовательским вводом

Убедитесь, что input is sanitized перед включением его в качестве части запроса SQL. В противном случае ваш код будет уязвим для взлома.

К сожалению, поскольку некоторые из введенных вами строк вводятся пользователями, вы не можете быть уверены, что они будут соответствовать тем, что у вас есть в вашей базе данных. Например, "stack-exchange" можно обоснованно представить как "Stack Exchange", stack exchange, StackExchange и т. Д. Таким образом, вам необходимо стандартизировать ввод, чтобы он соответствовал тому, как вы храните названия компаний в своей базе данных. Например, вы можете сделать все символы строчными буквами и заменить все пробелы или знаки препинания на дефисы. Это не исключает крайние случаи, такие как неправильное или вариантное написание, но это выходит за рамки этого вопроса.

Если сторонние строки вы получаете надежно содержать название компании в двойных кавычках (и двойных кавычках не используется, чтобы указать, что-нибудь еще в этих строках), вы можете получить имя компании с помощью PHP. Затем вы можете использовать предложение SQL WHERE, чтобы получить соответствующие строки.

$input = 'Somebody has sent item to "stack-exchange"'; 
$parts = explode('"', $input); 
$company_name = $parts[1]; 
$sql_query = 'SELECT * FROM table WHERE company_name="' . $company_name . '"' 

+0

Нет, к сожалению, нет.До и после названия компании может быть любой символ. – ewooycom

+0

Существуют ли какие-либо регулярные способы определения того, какая часть строки содержит название компании? Если нет, возможно, ваш вопрос будет лучше задан в обратном порядке: как проверить, соответствует ли какое-либо из значений company_name вашей таблицы части вашей строки. Это то, что вы ищете? – ASGM

+0

Это именно то, что я ищу. Невозможно получить часть строки, в которой находится имя_компании -> некоторые из сторонних приложений даже отправляют мне некоторые созданные пользователем строки. – ewooycom

0

Я думаю, что вам нужно, чтобы объяснить этот вопрос лучше, так как я могу интерпретировать это по крайней мере 2-мя способами: я) Строка указана в электронном является частичное совпадение с некоторыми данными столбец под названием company-name: Используйте одно и то же выражение, добавив% по мере необходимости например, '%' + название компании + '%', например, emailstring [который найдет «компанию обмена стеками» из «стековой бирки» по электронной почте]

ii) Существует несколько столбцов, каждый из которых назван в честь компании ... например, id, company1, company2, stack-exchange-company, company4

Если ваш db поддерживает динамический sql (например, большинство вариантов SQLServer), вы можете вычислить sql затем используйте set @sqlexpr = 'select stack-exchange from mytable' exec (@sqlexp)

В противном случае вам нужно будет динамически создать sql перед вызовом db.

+0

Проверьте мои изменения. В основном у меня есть столовые компании со списком компаний. Затем я получаю текст и должен определить, о какой компании мы говорим. – ewooycom

 Смежные вопросы

  • Нет связанных вопросов^_^