左连接MYSQL全文搜索-跨表搜索多列
我有两张桌子: 表1:内容[标题、描述、url、类型id] 表2:流派[流派id,流派名称] 我正在尝试运行一个完整的搜索查询,这样如果有人搜索某个流派,就会返回内容的详细信息。同样,如果有人搜索标题,内容将正常返回。请注意,某些内容没有指定流派,因此需要在这种情况下使用 这是我的问题-我只是不知道如何让它工作左连接MYSQL全文搜索-跨表搜索多列,mysql,search,Mysql,Search,我有两张桌子: 表1:内容[标题、描述、url、类型id] 表2:流派[流派id,流派名称] 我正在尝试运行一个完整的搜索查询,这样如果有人搜索某个流派,就会返回内容的详细信息。同样,如果有人搜索标题,内容将正常返回。请注意,某些内容没有指定流派,因此需要在这种情况下使用 这是我的问题-我只是不知道如何让它工作 "SELECT content.*, genre.* FROM content LEFT OUTER JOIN genre ON (genre.genre_id=content.gen
"SELECT content.*, genre.* FROM content LEFT OUTER JOIN genre
ON (genre.genre_id=content.genre_id)
WHERE MATCH (content.title, content.description)
AGAINST ('$query')
OR MATCH (genre.genre_name)
AGAINST ('$query')
AND content.url IS NOT NULL AND content.url <> '' LIMIT $lowerlimit, 10";
“从内容左侧选择内容。*,类型。*”
打开(genre.genre\u id=content.genre\u id)
匹配位置(content.title、content.description)
针对(“$query”)
或匹配(流派、流派名称)
针对(“$query”)
content.url不为NULL,content.url“”限制$lowerlimit,10;
如果您有没有流派id的内容项,那么内部连接就不是一个好办法。这将排除任何没有流派id的内容项。改为使用左外部联接。这假设没有类型id没有相应内容项的类型。如果是后者,则需要在内容表中创建某种类型的虚拟行来处理此问题。如果这不合理,请告诉我,我会给你更多详细信息。我不熟悉匹配**与**的位置,但我相信它可以重写为:
SELECT content.*, genre.*
FROM content
LEFT OUTER JOIN genre
ON genre.genre_id = content.genre_id
WHERE (content.title LIKE '%' + '$query' + '%'
OR content.description LIKE '%' + '$query' + '%'
OR genre.genre_name LIKE '%' + '$query' + '%')
AND content.url IS NOT NULL
AND content.url <> ''
LIMIT $lowerlimit, 10;
选择内容、类型*
从内容
左外连接类型
关于genre.genre\u id=content.genre\u id
其中(content.title,如“%”+“$query”+”%
或content.description,如“%”+“$query”+“%”
或genre.genre_名称,如“%”+“$query”+“%”)
并且content.url不为空
和content.url“”
限额$lowerlimit,10;
我还注意到,在您的查询中,在分号之前的末尾有一个额外的双引号。您的标题是LEFT join,但您的代码显示内部join,可能就是这样?我很抱歉,我确实将其设置为LEFT join,但一直在尝试许多选项!嗨,Melanie-我现在使用了左外连接,但你是对的,我可能有一些没有内容的类型ID(我可以强制它不是这样的…)不幸的是,查询仍然显示errorshmm如果我不在通配符和查询之间使用+符号,这是可行的-我试图避免类似的情况,尽管我听说它有性能问题