こんにちは、私はこのSQL文を持っています
SELECT *, MATCH (first_name,last_name) AGAINST ('*?*' IN BOOLEAN MODE) AS score, MATCH (groups.groupname) AGAINST ('*?*' IN BOOLEAN MODE) AS sscore
FROM users INNER JOIN groups
WHERE MATCH (first_name,last_name) AGAINST ('*?*' IN BOOLEAN MODE) OR MATCH (groups.groupname) AGAINST ('*?*' IN BOOLEAN MODE)
ORDER BY 'score' Desc
1) ジョイントスコアで注文するにはどうすればよいですか? つまり、この sql ステートメントでは、最初の一致のスコアと 2 番目の一致のスコアが作成されます。これら 2 つのスコアを加算して、そのスコアで並べ替えるにはどうすればよいですか?
2)また、データが同じではないため、INNER JOINの方法が最適ではないこともわかっています。とにかく私はそれを取り除くことができますか?
そして最後に、たとえばsimを使用し、first_name が simos のときに IN BOOLEAN MODE を削除すると、結果が得られません。実際、ブールモードで空の結果セットを取得すると、simを入力すると結果として simos が取得されます。
編集:これを行うことで2番目の質問に答えました
(SELECT `id`,MATCH(first_name,last_name) AGAINST ('?*' IN BOOLEAN MODE) AS score FROM `users` WHERE MATCH(first_name,last_name) AGAINST ('?*' IN BOOLEAN MODE))
ユニオン (SELECT groupid, MATCH(グループ名) AGAINST ('? ') AS スコア FROM groupsWHERE MATCH(グループ名) AGAINST ('? ') )
ただし、これはすべてを変更しますが、共同スコアは必要ありませんが、IN BOOLEAN MODE に問題があるためです。