1

这可能听起来很傻,但我只是好奇。

我有一个名为posts

+----------+------------------+------+-----+------ ---+----------------+
| 领域 | 类型 | 空 | 钥匙 | 默认 | 额外 |
+----------+------------------+------+-----+------ ---+----------------+
| 编号 | int(10) 无符号 | 否 | 优先级 | 空 | 自动增量 |
| 标题 | varchar(50) | 是 | | 空 | |
| 身体 | 正文 | 是 | | 空 | |
| 创建 | 日期时间 | 是 | | 空 | |
| 修改 | 日期时间 | 是 | | 空 | |
+----------+------------------+------+-----+------ ---+----------------+

价值:

+----+------------------------+-------- --------------------+----------+-------- --------------+
| 编号 | 标题 | 身体 | 创建 | 修改 |
+----+------------------------+-------- --------------------+----------+-------- --------------+
| 2 | 又是一个标题!!!| 帖子正文如下。特拉拉拉拉 | 2013-06-03 13:13:44 | 2013-06-05 09:36:51 |
| 3 | 标题反击| 这真的很令人兴奋!不是。| 2013-06-03 13:13:46 | 空 |
| 11 | 雄猫 | 汤米男孩!!!FFF | 2013-06-04 16:33:22 | 2013-06-04 16:48:40 |
| 12 | FFD | dsfdsf | 2013-06-04 16:48:56 | 2013-06-04 16:55:50 |
| 13 | fdf | dfdsf | 2013-06-04 16:57:47 | 2013-06-05 09:36:54 |
| 14 | GGD | dsfdsf | 2013-06-04 17:02:33 | 2013-06-04 17:02:33 |
| 15 | GG# | dsfdsfff322 | 2013-06-05 09:36:20 | 2013-06-05 09:36:28 |
+----+------------------------+-------- --------------------+----------+-------- --------------+

假设我想搜索具有值Th(不区分大小写)的行,而不考虑 FIELD。这就像制作一个快速搜索功能。

通常我会做类似的事情:SELECT * FROM posts WHERE title LIKE '%Th%' OR body LIKE '%Th%'

我没有包括其他字段,因为显然他们不会接受这些值。

我想知道这是否有捷径?喜欢SELECT * FROM posts LIKE '%Th%'

请指教。谢谢。

4

5 回答 5

2

使用普通的旧 SQL,您需要指定要包含的所有列名。

如果您想要更多类似搜索框的行为,我建议您查看 MySQL 的全文函数;看:

http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html

于 2013-06-06T00:42:58.763 回答
2

SQL 语言基于已知模式的假设。因此,没有“搜索任何列”类型的功能。它如何处理非文本列?不同排序规则的列呢?除了没有特性的语言之外,指定列向下一个开发人员表达了您的意图,并且任何事情都应该是最重要的考虑因素。

于 2013-06-06T00:44:01.673 回答
1

其他答案涵盖了您需要指定所有列。这是一个更短的替代公式:

SELECT *
FROM posts
WHERE concat(title, ' ', body) LIKE '%Th%'

如果您正在寻找完全匹配,那么您可以执行以下操作:

select *
from posts
where 'Th' in (title, body)
于 2013-06-06T01:11:35.617 回答
0

不,没有使用 where 子句的捷径。并指定列。否则,查询引擎永远无法知道要过滤什么以及要过滤什么列,除非您在 where 子句中指定它们。

如果您想要自定义快捷方式 - 您可以编写一个函数,该函数采用单个参数(搜索字符串)并返回所需字段。

于 2013-06-06T00:41:46.960 回答
0

恐怕没有。

不确定您的用例是什么……这种替代方法是否适用于您的用例?

mysql -u{user} -p{password} -h{hostname} {database_name} -B -e "{query}" | grep "{search_string}"

它连接到数据库并运行指定的查询,在新行中返回查询结果,字段由制表位分隔。然后使用 Unix 实用程序grep过滤返回的行。

于 2013-06-06T00:42:18.513 回答