我正在使用 SQL 开发一个简单的搜索功能并且卡住了。我使用 GROUP_CONCAT 将所有关键字放在一行中。关键字取自类别。
并非所有列都在此示例中。我已经把它剥离了
SELECT
p.id as id,
p.title as title,
p.title as company,
GROUP_CONCAT(DISTINCT cat.title SEPARATOR " ") as keywords,
FROM products p
JOIN product_categories pc ON p.id = pc.product_id
JOIN categories cat ON pc.category_id = cat.id
JOIN companies co ON p.company_id = co.id
WHERE MATCH (p.title) AGAINST ("Test")
OR MATCH (co.title) AGAINST ("Test")
GROUP BY p.id
keywords
包含类似keyword1 keyword2 keyword3
.
上面的 SQL 正在运行。但是,我不能将 MATCH AGAINST 与虚拟值一起使用keywords
。
我已经阅读了我认为是一个丑陋的解决方法,添加以下内容:
HAVING keywords LIKE "%keyword1%"
LIKE 可能很慢,因为 HAVING 在 GROUP BY 之后我不能使用 OR 所以在这种情况下 HAVING 将覆盖 WHERE。
理想情况下,我也想使用 MATCH AGAINST keywords
。那么,我有哪些选择?
- 某种虚拟表?
- 子查询?
- 还有什么?
我可能需要一个示例代码来理解。