【问题标题】:Checking multiple MySQL columns against a single value with LIKE使用 LIKE 针对单个值检查多个 MySQL 列
【发布时间】:2016-09-27 07:54:35
【问题描述】:

SELECT * FROM tableName WHERE 'value%' IN/LIKE (col1, col2, col3, col4)

我想在多个列中找到具有类似值条件的单个值。必须在 col1 OR col2 OR ..... 中找到带有 'value%' 的值,就像这样。

我有一个包含 10 列的大查询,因此需要为此优化查询。

提前谢谢你。

【问题讨论】:

  • 如果您需要搜索这么多列,这似乎是一个不太好的表格设计......
  • 你必须为每个“LIKE”列设置“OR”条件

标签: php mysql sql


【解决方案1】:

你可以这样做:

SELECT *
FROM   tableName
WHERE  
col1 LIKE 'value%' OR
col2 LIKE 'value%' OR ..

希望这会有所帮助。

【讨论】:

  • 这在大表上会非常慢,因为 MySQL 每个表只能使用一个索引,所以从第二个标准来看,不能使用索引。
【解决方案2】:

您要么为每个搜索创建一个带有联合的漂亮长查询(MySQL 并不擅长优化或条件),要么您需要在所有涉及的列上创建 fulltext index 并执行 Boolean search

联合查询将如下所示:

select * from tablename where col1 LIKE 'value%'
union
select * from tablename where col2 LIKE 'value%'
...

全文索引的布尔搜索如下所示:

select * FROM tablename WHERE MATCH (col1,col2,...)
AGAINST ('+value*' IN BOOLEAN MODE);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-28
    • 1970-01-01
    • 1970-01-01
    • 2015-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多