31

我正在尝试在 mySQL 中的整个表中搜索字符串。

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

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

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

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

SELECT * FROM `clients` IN 'Mary'
4

8 回答 8

29

尝试这样的事情:

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准确地说是节)。

于 2012-08-13T18:11:53.703 回答
15

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

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 的字段。

于 2012-08-13T18:11:59.867 回答
7

除了使用“like”关键字进行模式匹配之外。您还可以使用以下全文功能执行搜索;

SELECT * FROM clients WHERE MATCH (shipping_name, billing_name, email) AGAINST ('mary')
于 2015-03-02T13:52:41.090 回答
5

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

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

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

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

于 2015-05-21T14:25:08.660 回答
4

用于搜索整个表格的基于 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);
于 2013-08-13T04:46:24.063 回答
0

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

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

于 2015-02-02T12:03:31.180 回答
0

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

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

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

于 2017-07-05T10:03:32.277 回答
0

试试这个代码,

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

于 2019-03-11T07:51:58.380 回答