在两个MySQL列中搜索关键字

时间:2010-02-03 02:31:03

标签: sql mysql

我有一个用户表,其中包含名为 first_name last_name 的列。

SELECT * 
    FROM users 
WHERE first_name LIKE '%keywords%' 
    OR last_name LIKE '%keywords%'

使用上述内容,如果我搜索“John”或“Doe”,我会受到欢迎。

但如果我搜索“John Doe”,我会得到0个结果。如何以匹配“first_name last_name”而不仅仅是一个或另一个的方式搜索MySQL?

3 个答案:

答案 0 :(得分:1)

一种解决方案是在应用程序中拆分关键字,然后按如下方式构建查询:

-- Split "John Doe" -> "John", "Doe"

SELECT * FROM users WHERE
(
    (
         first_name LIKE '%keyword_1%' OR
         last_name LIKE '%keyword_1%'
    )
    AND
    (
         first_name LIKE '%keyword_2%' OR
         last_name LIKE '%keyword_2%'
    )
)

上述内容也与“Doe Joe”相匹配,而不仅仅是“Joe Doe”。如果您要搜索更多列,这将变得更大,因为您必须为每个关键字添加“AND块”。

此外,这会带来很大的性能成本,因为这样的查询无法使用first_namelast_name上的索引(如果有的话)。更好的方法是使用Full Text indexing

答案 1 :(得分:0)

尝试:

SELECT * FROM users WHERE CONCAT(first_name, ' ', last_name) LIKE '%keywords%';

答案 2 :(得分:0)

您是否尝试过使用full-text indexing