2012-08-13 85 views
19

我想在mySQL中搜索整个表格作为字符串。在mySQL中搜索整个表格作为字符串

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

我不知道如何轻松地搜索多个领域;这里是细节:

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

我想搜索所有字段包含任何条目字符串“Mary”。这就是我认为应该工作,但不会:

SELECT * FROM `clients` IN 'Mary' 

回答

18

尝试是这样的:

Select * from clients where Concat(field1, '', field2, '', fieldn) like "%Mary%" 

您可能希望看到SQL文档关于字符串操作符和正则表达式的更多信息。

编辑:可能有一些问题,NULL字段,所以以防万一,你可能想使用IFNULL(field_i, ''),而不是仅仅field_i

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

... Where lower(concat(...)) like lower("%Mary%") 

只是搜索所有字段:我相信没有办法做一个SQL查询,将搜索所有字段,而不显式声明字段进行搜索。原因是有理论的rel国家数据库和操纵关系数据的严格规则(像关系代数或科代数;这些就是SQL所来自的),理论不允许诸如“只搜索所有领域”之类的东西。当然,实际行为取决于供应商的具体实现。但在一般情况下,这是不可能的。为了确保,请检查select操作符语法(where部分,要成为presice)。

+2

我真的很想找到一种方法,不必输入表格中的每个字段。我想搜索所有字段。我会认为这种简单的事情是可能的。此外,我意识到,当我输入小写“玛丽”,它不会找到“玛丽”。它如何使它不区分大小写,并搜索所有字段? – VoltzRoad 2012-08-13 20:03:25

+0

我们可以连接(*)吗? – Waqas 2014-01-09 03:16:42

+2

空单引号是什么?谢谢 – KDawg 2014-11-23 00:01:10

12

找出所有可能与你的搜索字段,然后使用类似的查询:

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 +“玛丽” + someCaracters。

+0

这里的问题是,我必须在一次搜索查询中键入单词“玛丽”45次。然后,我打算处理我名单上的下一位客户......通常每天10-20!我试图做的就是拉起客户记录。它不能超过15秒 – VoltzRoad 2012-08-13 20:06:03

+4

写一个脚本,并定义一个@VARIABLE设置该名称,你会写一次,然后只需要修改该变量。 – 2012-08-13 20:14:40

+0

如果您将搜索条件直接放入您的SQL,然后你做错了。 就像弗朗西斯P说的那样。 – nickdnk 2015-06-08 11:51:41

3

基于PHP的搜索整个表的解决方案!搜索字符串是$字符串。这是通用的,如果你使用的崇高,你可以很容易地产生与多行选择和Emmet结合使用Text Pastry线的数百或数千将与所有的工作表与任意数量的字段

$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); 
+1

这是所有上述答案中的最佳答案 – 2016-09-07 06:53:50

0

的。

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

3

除了pattern matching与'喜欢'关键字。您还可以使用fulltext功能执行搜索 ;

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

如果你只是寻找一些文字,不需要用于编程的目的,你可以install HeidiSQL免费(我使用v9.2.0.4947)的结果集。

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

所有的比赛都显示在每张桌子的单独标签 - 非常好。

令人恐惧的有用和节省了我的时间。忘记与漫长的查询搞乱!

+0

哇,这很好。我已经使用Heidi并且不知道这个功能。 – ds00424 2017-11-14 21:55:41

0

的具体要求下面将搜索工作:

select * form table_name where (column_name1='%var1%' or column_name2='var2' or column_name='%var3%') and column_name='var'; 
,如果你想查询从数据库中检索数据,这将很好地工作