0

私は2つのテーブルを持っています:

表 1: コンテンツ [タイトル、説明、url、ジャンル ID] 表 2: ジャンル [ジャンル ID、ジャンル名]

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

ジャンル ID を持たないコンテンツ アイテムがある場合、INNER JOIN は適していません。これにより、ジャンル ID を持たないコンテンツ アイテムが除外されます。代わりに LEFT OUTER JOIN を使用してください。これは、genre_id に対応するコンテンツ アイテムがないジャンルが存在しないことを前提としています。後者の場合は、これを処理するためにコンテンツ テーブルに何らかのダミー行を作成する必要があります。これが意味をなさない場合は、お知らせください。詳細をお知らせします。

于 2013-02-28T22:23:08.937 に答える