LEFT JOIN MYSQL全文搜索 - 搜索多列交叉表

时间:2013-02-28 22:16:26

标签: mysql search

我有两张桌子:

表1:内容[title,description,url,genre_id] 表2:流派[genre_id,genre_name]

我正在尝试运行FULL SEARCH查询,以便在有人搜索类型时,将返回内容中的详细信息。同样,如果有人搜索标题,则内容将正常返回。请注意,某些内容没有分配类型,因此需要在此方案中工作。

这是我的查询 - 我无法弄清楚如何让它运作......

"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";

2 个答案:

答案 0 :(得分:0)

如果您的内容项目没有genre_id,那么INNER JOIN就不是了。这将排除任何没有genre-id的内容项。请改用LEFT OUTER JOIN。这假定没有genre_id没有相应内容项的类型。如果是后者,则需要在Content表中创建某种虚拟行来处理此问题。如果这没有意义,请告诉我,我会给你更多细节。

答案 1 :(得分:0)

我对WHERE MATCH ** AGAINST **并不熟悉,但我相信它可以改写为:

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;

我在你的查询中还注意到,在分号之前还有一个额外的双引号。