Intereting Posts

Строка запроса MySQL содержит

Я пытался выяснить, как я могу сделать запрос с MySQL, который проверяет, содержит ли значение (строка $haystack ) в определенном столбце определенные данные (строка $needle ), например:

 mysql_query(" SELECT * FROM `table` WHERE `column`.contains('{$needle}') "); 

В PHP функция называется substr($haystack, $needle) , поэтому возможно:

 WHERE substr(`column`, '{$needle}')=1 

Совсем просто:

 mysql_query(" SELECT * FROM `table` WHERE `column` LIKE '%{$needle}%' "); 

% – это шаблон для любого символа. Обратите внимание, что это может замедлить работу на очень больших наборах данных, поэтому, если ваша база данных будет расти, вам нужно будет использовать полнотекстовые индексы.

Использование:

 SELECT * FROM `table` WHERE INSTR(`column`, '{$needle}') > 0 

Справка:

  • INSTR
 WHERE `column` LIKE '%$needle%' 

Mine использует LOCATE в mysql:

LOCATE (substr, str), LOCATE (substr, str, pos)

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

В твоем случае:

 mysql_query(" SELECT * FROM `table` WHERE LOCATE('{$needle}','column') > 0 "); 

В дополнение к ответу от @WoLpH.

При использовании ключевого слова LIKE вас также есть возможность ограничить направление, в котором соответствует строка. Например:

Если вы искали строку, которая начинается с вашей $needle :

 ... WHERE column LIKE '{$needle}%' 

Если вы искали строку, которая заканчивается символом $needle :

 ... WHERE column LIKE '%{$needle}' 

имейте в виду, что это опасно:

 WHERE `column` LIKE '%{$needle}%' 

делать сначала:

 $needle = mysql_real_escape_string($needle); 

поэтому он предотвратит возможные атаки.

Вероятно, вы ищете функцию find_in_set :

 Where find_in_set($needle,'column') > 0 

Эта функция действует как функция in_array в PHP