【问题标题】:How to search on many fields of a single MySQL table without using many OR conditions?如何在不使用多个 OR 条件的情况下搜索单个 MySQL 表的多个字段?
【发布时间】:2015-03-29 20:47:17
【问题描述】:

我目前正在开发一个在表格中搜索一些数据的 php 页面。问题是搜索到的字符串可以在“field1”、“field2”、“field3”或“field4”中。

如何在不使用 4 个 OR 条件的情况下执行此 SQL 查询?

这是我此刻的疑问。

SELECT a_field FROM my_table WHERE LOWER(field1) = 'searched_string' OR LOWER(field2) = 'searched_string' OR LOWER(field3) = 'searched_string' OR LOWER(field4) = 'searched_string'

谢谢

【问题讨论】:

  • 您为什么认为这是个问题?您应该动态构建查询,因此您不需要关心查询中“OR”的数量。
  • 问题是我以前不知道在哪个字段上应用搜索。这就是我必须搜索所有字段的原因。
  • 如果您必须搜索所有字段,那么使用 OR 是正确的方法。我仍然看不到问题所在。我希望您不要手动更改查询?您必须有一些要搜索的字段数组,并动态构建查询。
  • 问题是这种查询需要一段时间(满足我们的需要)才能在 100 数百行上执行,我希望找到一种更好/更智能的方法来处理这种需求。
  • 没有其他方法可以做到这一点。

标签: mysql multiple-columns


【解决方案1】:

您可以为此使用匹配。但首先您需要创建索引。

SELECT * FROM table WHERE MATCH(field_1, field_2) AGAINST ('keyword or expression');

您可以在文档中找到详细信息。

Innodb 全文搜索支持在 5.6 版本之后提供

Mysql Full text search

【讨论】:

  • 不幸的是,这似乎不适用于我们的案例。
  • @user2193135 - 为什么它不起作用?如果你想要一个答案,你需要更具体。
  • 我明白了。目前在 MySQL 5.6 上使用 InnoDB 数据库,但在使用“ALTER TABLE”更改表定义后,我仍然从 MySQL 服务器收到“找不到与列列表匹配的 FULLTEXT 索引”。
  • 您是否为列创建全文索引?
  • 我认为这对您来说是一个错误的解决方案。全文搜索使用阈值和最小字长进行搜索。在继续之前,您最好仔细阅读此内容...
猜你喜欢
  • 2015-08-30
  • 2011-04-28
  • 2011-11-18
  • 1970-01-01
  • 1970-01-01
  • 2015-06-17
  • 1970-01-01
  • 2012-03-08
  • 2019-12-08
相关资源
最近更新 更多