【问题标题】:Mysql fulltext boolean search - sort by relevance and one more fieldMysql全文布尔搜索 - 按相关性和多一个字段排序
【发布时间】:2013-05-29 11:19:24
【问题描述】:

所以基本上我有两张桌子。第一个名为“照片”的表格如下所示:

id title
1  Some text here
2  Another text here

第二个名为“likes”的表看起来像这样

id photos_id user_id
1  1         10
2  1         11
3  2         12

photos_id 对应 'photos' 表中的 id

我正在使用以下查询进行全文布尔搜索,然后按相关性排序

SELECT *, MATCH (title) AGAINST ('text' in boolean mode)
AS score FROM photos
WHERE MATCH (title) AGAINST ('text' in boolean mode) order by score desc;

按相关性排序效果很好,但现在我想在相关性相等时也按喜欢的总数排序......类似于“按分数排序,total_likes desc”。有什么帮助吗?

【问题讨论】:

  • 那么,有什么问题呢?您可以按两个字段排序,就像您显示的那样。
  • 您建议的解决方案可以正常工作,只是结果很少具有相同的相关性。
  • @sashkello 是的,但我需要先计算每张照片有多少赞,我无法在同一个语句中这样做
  • @NielsKeurentjes 在上面的示例中,如果有人搜索“此处的文本”,他们将具有相同的相关性,那么我也需要按总喜欢排序

标签: mysql


【解决方案1】:

您可以为它做Left Join 并在此处查看SQLFiddle

SELECT
  p.*,
       MATCH (title) AGAINST ('text' IN BOOLEAN MODE) AS score ,
       COUNT(li.id) AS total_likes 
FROM photos p
  LEFT JOIN likes li
    ON p.id = li.photo_id
     WHERE  MATCH (p.title) AGAINST ('text' IN BOOLEAN MODE) 
    GROUP BY 
      li.photo_id

ORDER BY 
      score , total_likes DESC

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2020-03-28
  • 2023-03-08
  • 2012-11-09
  • 1970-01-01
  • 2011-06-13
  • 1970-01-01
  • 1970-01-01
  • 2011-01-26
相关资源
最近更新 更多