Поиск строки в текстовом столбце в MySQL - PullRequest
60 голосов
/ 27 марта 2010

У меня есть таблица MySQL, в которой есть столбец, в котором хранится XML в виде строки. Мне нужно найти все кортежи, где столбец xml содержит заданную строку из 6 символов. Ничто другое не имеет значения - все, что мне нужно знать, есть ли эта 6-символьная строка или нет.

Так что, вероятно, не имеет значения, что текст отформатирован как xml.

Вопрос: как я могу искать в mysql? т.е. SELECT * FROM items WHERE items.xml [contains the text '123456']

Есть ли способ использовать оператор LIKE для этого?

Ответы [ 6 ]

96 голосов
/ 27 марта 2010

Возможно, вы можете использовать предложение LIKE , чтобы выполнить простое сопоставление строк:

SELECT * FROM items WHERE items.xml LIKE '%123456%'

Если вам нужны более продвинутые функциональные возможности, посмотрите на функции полнотекстового поиска MySQL здесь: http://dev.mysql.com/doc/refman/5.1/en/fulltext-search.html

10 голосов
/ 20 октября 2011

Использование like может занять больше времени, поэтому используйте full_text_search :

SELECT * FROM items WHERE MATCH(items.xml) AGAINST ('your_search_word')
6 голосов
/ 27 марта 2010
SELECT * FROM items WHERE `items.xml` LIKE '%123456%'

Оператор % в LIKE означает «здесь может быть что угодно».

4 голосов
/ 27 марта 2010

Почему бы не использовать LIKE?

SELECT * FROM items WHERE items.xml LIKE '%123456%'
2 голосов
/ 27 марта 2010

вы имеете в виду:

SELECT * FROM items WHERE items.xml LIKE '%123456%'
0 голосов
/ 23 марта 2019

Когда вы используете линию подготовки WordPress, вышеуказанные решения не работают. Это решение, которое я использовал:

   $Table_Name    = $wpdb->prefix.'tablename';
   $SearchField = '%'. $YourVariable . '%';   
   $sql_query     = $wpdb->prepare("SELECT * FROM $Table_Name WHERE ColumnName LIKE %s", $SearchField) ;
 $rows = $wpdb->get_results($sql_query, ARRAY_A);
...