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

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

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

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

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

Ответ 1

Довольно просто:

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

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

Ответ 2

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

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

Ссылка:

Ответ 3

WHERE `column` LIKE '%$needle%'

Ответ 4

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

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

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

В вашем случае:

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

Ответ 5

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

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

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

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

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

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

Ответ 6

помните, что это опасно:

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

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

$needle = mysql_real_escape_string($needle);

чтобы предотвратить возможные атаки.

Ответ 7

Вероятно, вы ищете find_in_set:

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

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