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)我也知道,由于数据不同,INNER JOIN 方式不是最好的。无论如何我可以删除它吗?

最后,如果我在使用例如sim并且 first_name 是 simos 时删除 IN BOOLEAN MODE,我不会得到结果。事实上,如果我在布尔模式下输入sim ,我会得到一个空的结果集,我会得到 simos 作为结果。

编辑:我这样做回答了我的第二个问题

(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))

union (SELECT groupid, MATCH(groupname) AGAINST ('? ') AS score FROM groupsWHERE MATCH(groupname) AGAINST ('? ') )

这虽然改变了一切,因为我不需要联合得分,但在布尔模式下仍然存在问题

4

1 回答 1

1

order by 'score'不正确,它将尝试按固定字符串score' 排序,而不是您在match ... against.

尝试

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