Mysql 拆下';重复';从全文查询

Mysql 拆下';重复';从全文查询,mysql,sql,wordpress,Mysql,Sql,Wordpress,我正在扩展默认的WordPress全文搜索,并有一个SQL查询,如下所示 SELECT SQL_CALC_FOUND_ROWS DISTINCT wp_posts.*, MATCH (wp_posts.post_title, wp_posts.post_content) AGAINST ('"string" @4' IN BOOLEAN MODE) AS p_score, MATCH (wp_postmeta.meta_value) AGAINST ('"string" @4' IN B

我正在扩展默认的WordPress全文搜索,并有一个SQL查询,如下所示

SELECT SQL_CALC_FOUND_ROWS DISTINCT wp_posts.*,
  MATCH (wp_posts.post_title, wp_posts.post_content) AGAINST ('"string" @4' IN BOOLEAN MODE) AS p_score,
  MATCH (wp_postmeta.meta_value) AGAINST ('"string" @4' IN BOOLEAN MODE) AS pm_score
FROM wp_posts
  LEFT JOIN wp_postmeta ON wp_posts.ID = wp_postmeta.post_id
  LEFT JOIN wp_icl_translations ON wp_posts.ID = wp_icl_translations.element_id
  LEFT JOIN wp_icl_languages ON wp_icl_translations.language_code = wp_icl_languages.code AND wp_icl_languages.active = 1
WHERE 1=1
  AND IF(
    MATCH (wp_posts.post_title, wp_posts.post_content) AGAINST ('"string" @4' IN BOOLEAN MODE) > MATCH (wp_postmeta.meta_value) AGAINST ('"string" @4' IN BOOLEAN MODE),
    MATCH (wp_posts.post_title, wp_posts.post_content) AGAINST ('"string" @4' IN BOOLEAN MODE) > 0,
    MATCH (wp_postmeta.meta_value) AGAINST ('"string" @4' IN BOOLEAN MODE) > 0
  )
  AND wp_icl_translations.language_code = 'hr'
  AND wp_posts.post_status = 'publish'
ORDER BY p_score DESC LIMIT 0, 12
问题是,我在结果表中既有
p_分数
又有
pm_分数
,因此重复会像这样发生

ID  | ... | p_score  | pm_score
234 | ... | 9.234234 | 8.234323
234 | ... | 9.234234 | 0
虽然从技术上讲,它们不是重复的(不同的分数),但我仍然在搜索中看到重复的


是否可以进行查询,以便在获得
匹配的结果后,比较哪个分数(
p\u分数
pm\u分数
)更高,然后选择分数更高的分数来显示?我在
WHERE
子句中尝试了类似的方法,但显然,我做错了什么。

您应该能够使用MySQL函数

SELECT SQL_CALC_FOUND_ROWS DISTINCT wp_posts.*,
  GREATEST(
    MATCH (wp_posts.post_title, wp_posts.post_content) AGAINST ('"string" @4' IN BOOLEAN MODE),
    MATCH (wp_postmeta.meta_value) AGAINST ('"string" @4' IN BOOLEAN MODE)
  ) as score
FROM wp_posts
  LEFT JOIN wp_postmeta ON wp_posts.ID = wp_postmeta.post_id
  LEFT JOIN wp_icl_translations ON wp_posts.ID = wp_icl_translations.element_id
  LEFT JOIN wp_icl_languages ON wp_icl_translations.language_code = wp_icl_languages.code AND wp_icl_languages.active = 1
WHERE 1=1
  AND IF(
    MATCH (wp_posts.post_title, wp_posts.post_content) AGAINST ('"string" @4' IN BOOLEAN MODE) > MATCH (wp_postmeta.meta_value) AGAINST ('"string" @4' IN BOOLEAN MODE),
    MATCH (wp_posts.post_title, wp_posts.post_content) AGAINST ('"string" @4' IN BOOLEAN MODE) > 0,
    MATCH (wp_postmeta.meta_value) AGAINST ('"string" @4' IN BOOLEAN MODE) > 0
  )
  AND wp_icl_translations.language_code = 'hr'
  AND wp_posts.post_status = 'publish'
ORDER BY p_score DESC LIMIT 0, 12
这样,您就可以从这两个选项中选择最大的一个,并将它们作为
分数
进行计算


如果您想知道这是一个
p_分数
还是
pm_分数
,那么您可能需要不断获取这两个分数,并在代码级别处理重复项和比较。

这样可以消除重复项。我对最高分来自哪一部分并不感兴趣,只在乎分数:)谢谢!