mysql - 如何在不指定列的情况下过滤结果

时间:2013-06-06 00:37:15

标签: mysql select

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

我有一个名为posts的表:

+----------+------------------+------+-----+---------+----------------+
| Field    | Type             | Null | Key | Default | Extra          |
+----------+------------------+------+-----+---------+----------------+
| id       | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| title    | varchar(50)      | YES  |     | NULL    |                |
| body     | text             | YES  |     | NULL    |                |
| created  | datetime         | YES  |     | NULL    |                |
| modified | datetime         | YES  |     | NULL    |                |
+----------+------------------+------+-----+---------+----------------+

值:

+----+-----------------------+----------------------------------------+---------------------+---------------------+
| id | title                 | body                                   | created             | modified            |
+----+-----------------------+----------------------------------------+---------------------+---------------------+
|  2 | A title once again!!! | And the post body follows. Tralalalala | 2013-06-03 13:13:44 | 2013-06-05 09:36:51 |
|  3 | Title strikes back    | This is really exciting! Not.          | 2013-06-03 13:13:46 | NULL                |
| 11 | Tomcat                | Tommy boy!!! 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%'一样。

请指教。感谢。

5 个答案:

答案 0 :(得分:2)

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

如果你想要更多类似搜索框的行为,我建议你看一下MySQL的全文功能;见:

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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

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

如果您正在寻找完全匹配,那么您可以这样做:

select *
from posts
where 'Th' in (title, body)

答案 3 :(得分:0)

没有使用where子句的快捷方式。并指定列。否则,除非您在where子句中指定它们,否则查询引擎永远不会知道要过滤的内容和要过滤的列。

如果你想要一个自定义快捷方式 - 你可以编写一个函数,它接受一个参数(搜索字符串)并返回必填字段。

答案 4 :(得分:0)

我担心没有。

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

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

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