在mySQL中搜索整个表以获取字符串

时间:2012-08-13 18:01:41

标签: mysql sql search

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

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

我无法弄清楚如何轻松搜索多个字段;以下是详细信息:

该表是“客户”。它有大约30个字段和800个条目,太多而无法在浏览器中同时显示所有内容。我想搜索一个名称(即“Mary”),但它可能位于shipping_name fieldbilling_name fieldemail字段等。

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

SELECT * FROM `clients` IN 'Mary'

8 个答案:

答案 0 :(得分:24)

尝试这样的事情:

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部分)。

答案 1 :(得分:14)

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

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

答案 2 :(得分:7)

除了pattern matching之外还有'喜欢'关键词。您也可以执行搜索 使用fulltext功能,如下所示;

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

答案 3 :(得分: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);

答案 4 :(得分:3)

如果您只是在寻找某些文字并且不需要为编程目的而设置结果集,那么您可以免费install HeidiSQL(我使用v9.2.0.4947)。

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

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

非常有用并节省了我的时间。忘记冗长的查询!

答案 5 :(得分:0)

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

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

答案 6 :(得分:0)

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

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

如果您想查询从数据库中搜索数据,这将完美无缺。

答案 7 :(得分: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