2013-06-19 4 views
0

Скажем, у меня есть следующий сценарий:Сравнить строку с колонки MySQL

$string1 = 'This is my string with the city New York in'; 
$string2 = 'This is my string with the city Los Angeles in'; 

MySQL-DB:

id|city 
0|San Diego 
1|Memphis 
2|Los Angeles 
3|Budapest 
4|New York 

Как я должен сделать, чтобы принять целые строки - без разделения его - и проверьте, любое значение в городе усиливается в любой из строк?

У меня есть много строк с дополнительной информацией, чем указано выше.

+1

У меня есть несколько идей, что вы * вы * попробовали? –

ответ

1

В MySQL вы можете сделать что-то вроде этого:

SELECT id, city 
FROM myTable 
WHERE INSTR('This is my string with the city New York in', city) > 0 

Нечто подобное будет найти имена, даже если они «Часть слова, поэтому он найдет Nome в« Номенклатуре Сан-Паулу ». Плохой пример, но лучшее, что я мог придумать: Nome совпадений, потому что он находится в nomenclature. Чтобы избежать этих типов матчей регулярного выражения необходимо:

SELECT id, city 
FROM myTable 
WHERE 'This is my string with the city New York in' 
     RLIKE CONCAT('(^|[^[:alpha:]])', city, '($|[^[:alpha:]])') 

Регулярного выражение (после конкатенации) будет читать, например:

(^|[^[:alpha:]])New York($|[^[:alpha:]]) 

... что означает: Сопоставьте начало строки или небуквенный символ, затем значение «Нью-Йорк», затем конец строки или небуквенный символ. Короче говоря, он найдет только целые слова.

+0

Спасибо за ответ, извините за поздний ответ. Я получаю это сообщение об ошибке _Unknown column 'New York' in 'where clause' SELECT 'city_name' FROM (' city') WHERE 'New York' RLIKE CONCAT ('(^ | [^ [: alpha:]])' , city_name, '($ | [^ [: alpha:]])) мой SQL-вопрос выглядит следующим образом (Coodeigniter): '\t $ this-> db-> select (' city_name '); \t $ where = "$ string RLIKE CONCAT ('(^ | [^ [: alpha:]])', city_name, '($ | [^ [: alpha:]])')"; \t \t $ this-> db-> где ($ where); \t \t $ query = $ this-> db-> get ('city'); 'Что я делаю неправильно? – JohnF

0

Вы можете использовать регулярные выражения как в php, так и в mysql.

Для MYSQL вы можете использовать REGEXP operator

В PHP вы можете использовать preg_match

Регулярное выражение будет

".*" + city + ".*" 
0

я хотел бы попробовать 2 вещи и посмотреть, что это fasets \ работает лучше основанный на том, что накануне им делает

  1. получите все города implode() в список, разделенный на канал (|), и используйте , что в предгорийном совпадении, которое я выполняю против строк.

  2. отправьте города из db в цикл while и используйте strpos(), чтобы проверить существование в строке.

1

Если вы делаете это на PHP.

Одним из способов является запрос городов в массив. Затем проведите по массиву с помощью strpos, чтобы увидеть, содержатся ли города в вашей строке, например.

foreach($city in arrayOfCities) 
{ 
    if(strpos($string1, $city) !== false) 
    { 
    //city found in string do something 
    } 
} 

Это может быть не точный код, но StrPos будет работать: http://www.php.net/manual/en/function.strpos.php

0
WHERE $str1 LIKE CONCAT('%', city, '%') OR $str2 LIKE CONCAT(...) ... 

пс: иметь в виду $str1 должны быть надлежащим образом избежали или использовать в качестве параметра подготовленного заявления.

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