0

我有两张桌子:

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

我正在尝试运行 FULL SEARCH 查询,以便如果有人搜索流派,则将返回 Content 的详细信息。同样,如果有人搜索标题,则内容将正常返回。请注意,某些内容没有分配流派,因此需要在这种情况下工作。

这是我的查询 - 我只是不知道如何让它工作......

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

2 回答 2

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;

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

于 2013-03-01T13:24:16.140 回答
0

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

于 2013-02-28T22:23:08.937 回答