2 回の FULLTEXT 検索で、本のタイトルとタグに含まれる検索用語を探し、次の結果を取得します。
rScore tScore ID ... 1.235689725827653 0 406 0.928482055664062 2.37063312530518 406 0.928482055664062 0 406 0.453363467548853 0 520 ...
私が望んでいることは、すべての重複した ID が連結され、最高のスコアが取得されたことです。
rScore tScore ID ... 1.235689725827653 2.37063312530518 406 0.453363467548853 0 520 ...
、ただし GROUP BY の後、ID 406 はこの行の列にグループ化されました。
... MATCH_SCORE_TITLE MATCH_SCORE_TAGS ID 0.928482055664062 0 406 0.453363467548853 0 520 ...
これらすべての結果をグループ化し、各 MATCH の最大値を維持するにはどうすればよいですか? これは以前に質問されており、JOIN で実行できることは知っていますが、2 つの行の組み合わせでは見つかりませんでした。さらに、TITLE と TAGS が 2 つの異なるテーブルにあるため、クエリに既に JOINS があります。
更新: 「registrants」(検索するタイトルのある左側のテーブル)、「registrants_tags」(左側のテーブルと右側のテーブルの間のリレーショナル テーブル)、および「tags」(検索するタグのある右側のテーブル) の 3 つのテーブルがあります。以下は、SQL クエリの簡略化されたバージョンです。
SELECT
tags.tag, (Also tried (GROUP_CONCAT(`tags`.`tag`) AS tags)
MAX(MATCH(registrants.story_title) AGAINST('bob')) as rScore,
MAX(MATCH(tags.tag) AGAINST('bob')) as tScore,
registrants.id, registrants.story_title
FROM registrants
LEFT JOIN registrants_tags ON registrants.id = registrants_tags.registrant
LEFT JOIN tags ON registrants_tags.tag = tags.id
WHERE MATCH(registrants.story_title) AGAINST('bob')
OR MATCH(tags.tag) AGAINST('bob')
GROUP BY registrants.id
ORDER BY (rScore + tScore) DESC
「#1247 - Reference 'tscore' not supported (reference to group function)」というエラー メッセージが表示されます。