在 mySQL 中的整个表中搜索字符串

Posted

技术标签:

【中文标题】在 mySQL 中的整个表中搜索字符串【英文标题】:Search a whole table in mySQL for a string 【发布时间】:2012-08-10 00:05:38 【问题描述】:

我正在尝试。

我想搜索表的所有字段和所有条目,返回包含指定文本的每个完整条目。

我不知道如何轻松搜索多个字段;以下是详细信息:

表格是“客户”。它有大约 30 个字段和 800 个条目,太多了,无法在浏览器中一次显示。我想搜索一个名字(即“Mary”),但它可能在shipping_name fieldbilling_name fieldemail 字段等中。

我想在所有字段中搜索包含字符串“Mary”的任何条目。这是我认为应该有效但无效的方法:

SELECT * FROM `clients` IN 'Mary'

【问题讨论】:

【参考方案1】:

试试这个代码,

SELECT 
       * 
FROM 
       `customers` 
WHERE 
       (
          CONVERT 
               (`customer_code` USING utf8mb4) LIKE '%Mary%' 
          OR 
          CONVERT(`customer_name` USING utf8mb4) LIKE '%Mary%' 
          OR 
          CONVERT(`email_id` USING utf8mb4) LIKE '%Mary%' 
          OR 
          CONVERT(`address1` USING utf8mb4) LIKE '%Mary%' 
          OR
          CONVERT(`report_sorting` USING utf8mb4) LIKE '%Mary%'
       )

这有助于解决你的问题 mysql 版本 5.7.21

【讨论】:

【参考方案2】:

对于特定要求,以下将适用于搜索:

select * from table_name where (column_name1='%var1%' or column_name2='var2' or column_name='%var3%') and column_name='var';

如果您想从数据库中查询搜索数据,这将非常有效。

【讨论】:

【参考方案3】:

试试这样的:

SELECT * FROM clients WHERE CONCAT(field1, '', field2, '', fieldn) LIKE "%Mary%"

您可能希望查看 SQL 文档以获取有关字符串运算符和正则表达式的更多信息。

编辑:NULL 字段可能存在一些问题,因此以防万一您可能想使用 IFNULL(field_i, '') 而不仅仅是 field_i

区分大小写:您可以使用不区分大小写的排序规则或类似的东西:

... WHERE LOWER(CONCAT(...)) LIKE LOWER("%Mary%")

只需搜索所有字段:我相信没有办法在没有明确声明要搜索的字段的情况下进行搜索所有字段的 SQL 查询。原因是存在关系理论数据库和操作关系数据的严格规则(例如关系代数或 codd 代数;这些是 SQL 的来源),并且理论上不允许诸如“仅搜索所有字段”之类的事情。当然,实际行为取决于供应商的具体实现。但一般情况下是不可能的。为了确保这一点,请检查SELECT 运算符语法(准确地说是WHERE 部分)。

【讨论】:

我真的在寻找一种不必输入表的每个字段的方法。我想搜索所有字段。我会假设这样一个简单的事情是可能的。我还意识到,当我输入小写“mary”时,它找不到“Mary”。它如何使它不区分大小写,并搜索所有字段? 空单引号 '' 是干什么用的?谢谢 这很不幸。我正在尝试查找特定字段在包含 251 个表的数据库中的位置,每个表可能有多达 60 个字段。【参考方案4】:

如果您只是在寻找一些文本并且不需要结果集来进行编程,您可以免费install HeidiSQL(我使用的是 v9.2.0.4947)。

右键单击任何数据库或表并选择“在服务器上查找文本”。

所有匹配项都显示在每个表的单独选项卡中 - 非常好。

非常有用,为我节省了几个小时。忘掉冗长的查询吧!

【讨论】:

哇,这很好。我已经使用 Heidi,但不知道此功能。 这是一个很好的解决方案,我不知道海蒂已经有了它,干杯 繁荣 - 我认为最好的答案(除非你需要程序控制我猜)。【参考方案5】:

除了pattern matching 带有'like' 关键字。您还可以执行搜索 通过使用fulltext 功能如下;

SELECT * FROM clients WHERE MATCH (shipping_name, billing_name, email) AGAINST ('mary')

【讨论】:

【参考方案6】:

如果您使用 Sublime,您可以使用 Text Pastry 结合多行选择和 Emmet 轻松生成数百或数千行。

所以在我的例子中,我将文档类型设置为 html,然后输入 div*249,点击 tab,Emmet 创建了 249 个空 div。然后使用多项选择,我在每个选项中输入col_id_ 并触发Text Pastry 以插入一个递增的ID 号。然后再次多选,您可以删除 div 标记并将其替换为 MySQL 语法。

【讨论】:

【参考方案7】:

基于 php 的搜索整个表格的解决方案!搜索字符串是 $string 。这是通用的,适用于具有任意数量字段的所有表

$sql="SELECT * from client_wireless";
$sql_query=mysql_query($sql);
$logicStr="WHERE ";
$count=mysql_num_fields($sql_query);
for($i=0 ; $i < mysql_num_fields($sql_query) ; $i++)
 if($i == ($count-1) )
$logicStr=$logicStr."".mysql_field_name($sql_query,$i)." LIKE '%".$string."%' ";
else
$logicStr=$logicStr."".mysql_field_name($sql_query,$i)." LIKE '%".$string."%' OR ";

// start the search in all the fields and when a match is found, go on printing it .
$sql="SELECT * from client_wireless ".$logicStr;
//echo $sql;
$query=mysql_query($sql);

【讨论】:

这是上述所有答案中最好的答案 除了它不是最好的解决方案,因为它自 PHP 5.4.0 起就被贬值了。【参考方案8】:

确定可能与您的搜索相关的所有字段,然后使用如下查询:

SELECT * FROM clients
WHERE field1 LIKE '%Mary%'
   OR field2 LIKE '%Mary%'
   OR field3 LIKE '%Mary%'
   OR field4 LIKE '%Mary%'
   ....
   (do that for each field you want to check)

使用 LIKE '%Mary%' 而不是 = 'Mary' 将查找包含 someCaracters + 'Mary' + someCaracters 的字段。

【讨论】:

这里的问题是我必须为一个搜索查询输入 45 次“玛丽”这个词。然后我要去处理我名单上的下一个客户......通常每天10-20个!我想做的就是提取客户记录。不能超过 15 秒 编写一个脚本并定义一个@VARIABLE,在其中设置该名称,您只需编写一次,然后只需修改该变量.. 如果您将搜索词直接放入 SQL 中,那么您做错了。照弗朗西斯 P 说的做。

以上是关于在 mySQL 中的整个表中搜索字符串的主要内容,如果未能解决你的问题,请参考以下文章

立即执行不返回预期结果以在整个表中搜索字符串

在 SQL Server 中替换整个表中的字符

如果整个列数据与搜索字符串匹配,如何在jQUERY Datatable中显示/搜索数据?

如何用另一个表中的匹配值替换/更新列中每个字符串的所有实例?

如何匹配保存在 mysql 表中的“\a's”等转义字符?

以字符串格式返回 MySQL 表中的所有列