我有一个用户表,其中包含名为 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?
答案 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_name
和last_name
上的索引(如果有的话)。更好的方法是使用Full Text indexing。
答案 1 :(得分:0)
尝试:
SELECT * FROM users WHERE CONCAT(first_name, ' ', last_name) LIKE '%keywords%';
答案 2 :(得分:0)
您是否尝试过使用full-text indexing?