2010-03-26 80 views
51

我有一个mysql表,它有一个将xml存储为字符串的列。我需要找到xml列包含给定的6个字符的字符串的所有元组。没有其他事情 - 我需要知道的只是这6个字符串是否存在。在MySQL中的文本列中搜索字符串

所以它可能没关系,文本被格式化为XML。

问题:如何在mysql中搜索? ie SELECT * FROM items WHERE items.xml [contains the text '123456']

有没有办法可以使用LIKE运算符来做到这一点?

+0

请参阅:http://winashwin.wordpress.com/2012/08/28/mysql-search/ – 2012-08-30 09:25:45

回答

78

你也许可以使用LIKE clause做一些简单的字符串匹配:

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

如果您需要更高级的功能,看看MySQL的全文搜索功能在这里:http://dev.mysql.com/doc/refman/5.1/en/fulltext-search.html

+1

..我将如何修改这与PHP查询一起使用?我有一个字符串'$ message',我想选择具有该字符串的行。我有'SELECT * FROM消息WHERE from_id ='$ fromID'和to_id ='$ toID'并且消息LIKE'$ message''但我认为这不起作用 – Hristo 2010-06-30 15:32:06

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

%运营商LIKE的意思是 “什么都可以在这里”。

2

你的意思是:

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

您是否错过了LIKE? – alex 2010-03-26 21:17:50

+0

已提交编辑...他有一个缺少LIKE – 2013-12-23 12:59:39

2

为什么不使用什么样的?

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

使用like可能需要更长时间,因此请使用full_text_search

Select * from items where match(items.xml) against ('your_search_word') 
+8

这是否证明比LIKE更快? – 2013-04-03 18:48:16