听起来可能很傻,但我很好奇。
我有一个名为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%'
一样。
请指教。感谢。
答案 0 :(得分:2)
使用普通的旧SQL,您需要指定要包含的所有列名。
如果你想要更多类似搜索框的行为,我建议你看一下MySQL的全文功能;见:
答案 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
过滤返回的行。