在MySQL中搜索文本列中的字符串
我有一个mysql表,它有一列将xml存储为字符串。我需要找到xml列包含6个字符的给定字符串的所有元组。没什么别的事——我只需要知道这个6个字符的字符串是否存在 因此,将文本格式化为xml可能并不重要 问题:如何在mysql中搜索? 即在MySQL中搜索文本列中的字符串,mysql,search,sql-like,Mysql,Search,Sql Like,我有一个mysql表,它有一列将xml存储为字符串。我需要找到xml列包含6个字符的给定字符串的所有元组。没什么别的事——我只需要知道这个6个字符的字符串是否存在 因此,将文本格式化为xml可能并不重要 问题:如何在mysql中搜索? 即 从items.xml[包含文本“123456”的items中选择* 有没有一种方法可以使用LIKE运算符来执行此操作 SELECT * FROM items WHERE `items.xml` LIKE '%123456%' %%运算符在LIKE中表示“这里
从items.xml[包含文本“123456”的items中选择*
有没有一种方法可以使用LIKE运算符来执行此操作
SELECT * FROM items WHERE `items.xml` LIKE '%123456%'
%%
运算符在LIKE
中表示“这里可以有任何东西”。您的意思是:
SELECT * FROM items WHERE items.xml LIKE '%123456%'
为什么不使用LIKE
SELECT * FROM items WHERE items.xml LIKE '%123456%'
您可能可以使用进行一些简单的字符串匹配:
SELECT * FROM items WHERE items.xml LIKE '%123456%'
如果您需要更高级的功能,请在此处查看MySQL的全文搜索功能:使用like可能需要更长的时间,因此请使用全文搜索:
当您使用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);
.. 我将如何修改它以用于PHP查询?我有一个字符串
$message
,我想选择具有该字符串的行。我有SELECT*FROM Messages,其中FROM_id='$fromID'和to_id='$toID'以及类似于'$message'
的消息,但我不认为这是有效的。如果123456
是字符串的开头,那么它就不起作用了。timothymarois-%匹配零个或多个字符,因此如果所需字符串位于开头、结尾,或者你正在搜索的内容的中间。请参阅:您可能也应该这样做。请参阅:这被证明比LIKE更快吗?重要的是要注意,要实现这一点,需要在目标列上有全文
索引。为了进一步扩展其他列,FTS与LIKE
非常不同,后者将返回单词和短语的变体,而FTS不会。例如,如“%123456%”
将返回带有“0123456”、“123456”、“1234567”
等的结果。其中对('123456')
只将结果作为单个词返回以匹配,如“is 123456”、“123456”、“123456 is”
等,但找不到“0123456”
或“1234567”
。示例:这就是为什么FTS可以在更大的数据集上执行得更快,因为它不会执行类似于的的全表扫描。
$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);