Строка запроса MySQL содержит
Я пытался понять, как я могу сделать запрос с помощью MySQL, который проверяет, содержит ли значение (строка $haystack
) в определенном столбце определенные данные (строка $needle
), например:
mysql_query("
SELECT *
FROM `table`
WHERE `column`.contains('{$needle}')
");
В PHP функция называется substr($haystack, $needle)
, поэтому, возможно:
WHERE substr(`column`, '{$needle}')=1
7 answers
На самом деле довольно просто:
mysql_query("
SELECT *
FROM `table`
WHERE `column` LIKE '%{$needle}%'
");
%
является подстановочным знаком для любого символа. Обратите внимание, что это может замедлиться для очень больших наборов данных, поэтому, если ваша база данных будет расти, вам придется использовать полнотекстовые индексы.
WHERE `column` LIKE '%$needle%'
Мой использует LOCATE
в mysql:
НАЙДИТЕ (substr, str), НАЙДИТЕ (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