通过订单按匹配对抗



我想在同一查询上使用订单和组。但是,如果我使用相关性的小组无法正常工作。

这是代码:

(SELECT *, MATCH(keywords) AGAINST('$busqueda') AS relevancia 
FROM libros 
WHERE MATCH(keywords) AGAINST('$busqueda') AND tipo = 'nuevo'
GROUP BY id_libro 
ORDER BY relevancia DESC, posicion ASC, precio DESC LIMIT $numero_limite)

如果我获得了同等学位(另一个示例),但是使用上一个代码,我的查询将正确起作用,因为在此示例上,按顺序和群组按工作良好,但没有我需要的匹配:

SELECT
   t.id, t.catid, t.name, t.userid, t.subject  
FROM
    (SELECT id,  catid,  name,  userid,  subject , thread
    FROM mensajes
    ORDER BY t.id DESC) t
GROUP BY t.thread  
LIMIT 6;

这是桌子(对不起,论坛不允许我将图片放在没有10分的情况下):

http://www.forosdelweb.com/f86/group-match-against-respetando-relevancia-1089769/#post4561689

您可以在该链接上看到捕获/图像。

如您在图像3上看到的,结果是不正确的。必须是id_unico 9,因为有姿势21。

有人知道吗?

您的第二个示例简直是错误的。它正在使用MySQL中的group by扩展名,该扩展名已明确记录以返回任意列值,而不是查询所需的值。您可以在这里阅读有关它的信息。

您可以通过使用子查询找到最大相关性来完成您想要的事情,如:

select l.*
from (SELECT *, MATCH(keywords) AGAINST('$busqueda') AS relevancia 
      FROM libros l
      WHERE MATCH(keywords) AGAINST('$busqueda') AND tipo = 'nuevo'
     ) l
where not exists (select 1
                  from libros l2
                  where l2.id_libros = l.id_libros and
                        l2.tipo = l1.typo and
                        MATCH(l2.keywords) AGAINST('$busqueda') > l.relevancia
                 )
ORDER BY relevancia DESC, posicion ASC, precio DESC
LIMIT $numero_limite;

相关内容

  • 没有找到相关文章

最新更新