Вы можете использовать regex или использовать подстановочный знак.
так что вы можете использовать:
select * from tablename where companyname LIKE '%acme%'
это будет соответствовать все, что имеет «Акме» в этом,% означает, что-либо до/после.
Просто лишняя мысль, которая может быть проще, чем при использовании регулярного выражения, было бы легко заменить любое ,
на %
, а затем использовать это как строку поиска. Затем он подстановит этот символ.
$searchstring = str_replace(',', '%', $originalstring);
$qry = "select * from tablename where companyname LIKE '%$searchstring%"'
обновление
если вы хотите использовать регулярное выражение, просто разделить вашу строку поиска в часть на персонажах, а затем построить шаблон из этого. (Это будет разделен на знаки препинания и избавиться от любых пространств)
preg_match("/(.*)\p{P}(.*)/", str_replace(' ', '', $searchstring), $output_array);
это даст вам массив с 3-х частей, всей строки, и расщепленных «бит». затем просто перебирайте их и создайте дружественную строку mysql. (Мы хотим, чтобы пропустить первый, Hense $key
начиная с 1)
$pattern = '';
for($key = 1; $key < count($output_array); $key++) {
$pattern .= $output_array[$key] . '.*';
}
$qry = "select * from database where companyname REGEXP '$pattern'";
Херес fiddle
с полнотекстовым индексом, да. с 'где foo = 'acme.inc'' или' where foo like' acme.inc'', нет, не без серьезного искажения условий. –