0

こんにちは、私はこの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 に問題があるためです。

4

1 に答える 1

1

order by 'score'scoreが正しくない場合は、で作成したエイリアスではなく、固定文字列'で並べ替えようとしますmatch ... against

試す

...
ORDER BY (score + sscore) DESC
于 2011-07-12T14:52:50.200 に答える