您可以将简单的MYSQL语句与FullText语句结合使用

时间:2017-11-22 17:53:17

标签: php mysql full-text-search

我为艺术广告制作了内部数据库/搜索引擎。我正在尝试创建一个搜索条件,您可以在其中查询数据库中的一列,还可以使用全文搜索在数据库中搜索多个列以进行短语搜索。搜索查询的示例可能是: 11月{和}黑色星期五。 11月将搜索与created_for列匹配​​的广告素材,黑色星期五将使用全文搜索搜索标题,副标题和additional_text列。任何关于如何实现这一点的想法都会非常有用!

SELECT 
    (SELECT * FROM headlines WHERE created_for = '$searchString' AND image_slug <> '') 
    (SELECT *, MATCH(headline) AGAINST('$fullText' IN BOOLEAN MODE) AS MultiScore, MATCH(subheadline, additional_text) AGAINST('$fullText' IN BOOLEAN MODE) AS MultiSecondScore 
    FROM `headlines` 
    WHERE MATCH(headline, subheadline, additional_text) AGAINST('$fullText' IN BOOLEAN MODE))

我尝试在第二个Select语句之前添加一个UNION语句,但是我收到一条错误消息,指出列不匹配。不知道我在这里遇到了什么问题,但提前感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

AND子句中使用WHERE

SELECT *, MATCH(headline) AGAINST('$fullText' IN BOOLEAN MODE) AS MultiScore, MATCH(subheadline, additional_text) AGAINST('$fullText' IN BOOLEAN MODE) AS MultiSecondScore
FROM headlines
WHERE created_for = '$searchString'
AND image_slug <> ''
AND MATCH(headline, subheadline, additional_text) AGAINST('$fullText' IN BOOLEAN MODE)

UNION会得到符合任何一个条件的结果,而不是两者。当您使用UNION时,两个子查询都必须返回相同数量的列 - 您必须向第一个查询添加额外的列以匹配MultiScoreMultiSecondScore列第一次查询。