我正在尝试在mySQL中搜索整个表中的字符串.
我想搜索表的所有字段和所有主菜,返回包含指定文本的每个完整条目.
我无法弄清楚如何轻松搜索多个字段; 这是详细信息:
该表是"客户".它有大约30个字段和800个条目,太多而无法在浏览器中同时显示所有内容.我想搜索一个名字(即"玛丽"),但它可能在shipping_name field或billing_name field,或者email字段等.
我想在所有字段中搜索包含字符串"Mary"的任何条目.这是我认为应该工作但不是:
SELECT * FROM `clients` IN 'Mary'
Run Code Online (Sandbox Code Playgroud)
Art*_*ykh 25
尝试这样的事情:
SELECT * FROM clients WHERE CONCAT(field1, '', field2, '', fieldn) LIKE "%Mary%"
Run Code Online (Sandbox Code Playgroud)
您可能希望查看SQL文档以获取有关字符串运算符和正则表达式的其他信息.
编辑:NULL字段可能存在一些问题,以防您可能想要使用IFNULL(field_i, '')而不仅仅是field_i
区分大小写:您可以使用不区分大小写的排序规则或类似的方法:
... WHERE LOWER(CONCAT(...)) LIKE LOWER("%Mary%")
Run Code Online (Sandbox Code Playgroud)
只搜索所有字段:我相信没有办法在没有明确声明要搜索的字段的情况下进行搜索所有字段的SQL查询.原因是存在关系数据库理论和操纵关系数据的严格规则(某事像关系代数或codd代数;这些是SQL的来源,而理论不允许诸如"只搜索所有字段"之类的东西.当然,实际行为取决于供应商的具体实现.但在一般情况下,这是不可能的.为了确保,请检查SELECT操作员语法(WHERE准确地说,部分).
Fra*_*s P 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)
Run Code Online (Sandbox Code Playgroud)
使用LIKE '%Mary%'而不是= 'Mary'将查找包含someCaracters +'Mary'+ someCaracters的字段.
小智 7
除了与'like'关键字匹配的模式.您还可以使用全文功能执行搜索,如下所示;
SELECT * FROM clients WHERE MATCH (shipping_name, billing_name, email) AGAINST ('mary')
Run Code Online (Sandbox Code Playgroud)
如果您只是在寻找一些文本并且不需要用于编程目的的结果集,您可以免费安装 HeidiSQL(我使用的是 v9.2.0.4947)。
右键单击任何数据库或表,然后选择“在服务器上查找文本”。
所有匹配项都显示在每个表的单独选项卡中 - 非常好。
非常有用,节省了我几个小时。忘记搞乱冗长的查询!!