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


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

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

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

WHERE substr(`column`, '{$needle}')=1
Author: ks1322, 2010-04-08

7 answers

На самом деле довольно просто:

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

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

 331
Author: Wolph, 2010-04-08 17:56:16

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

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

Ссылка:

 116
Author: OMG Ponies, 2010-04-08 19:40:22
WHERE `column` LIKE '%$needle%'
 41
Author: oedo, 2015-12-25 16:40:26

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

НАЙДИТЕ (substr, str), НАЙДИТЕ (substr, str, pos)

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

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

mysql_query("
SELECT * FROM `table`
WHERE LOCATE('{$needle}','column') > 0
");
 20
Author: risnandar, 2015-08-21 10:45:12

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

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

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

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

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

... WHERE column LIKE '%{$needle}'
 10
Author: Joshua Powell, 2015-08-21 10:41:57

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

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

Сделайте сначала:

$needle = mysql_real_escape_string($needle);

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

 2
Author: Alejandro Moreno, 2013-08-27 15:20:25

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

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

Эта функция действует следующим образом in_array функция в PHP

 0
Author: Andres, 2015-12-03 17:08:34