mysql - 按顺序按比赛分组

标签 mysql sql group-by match match-against

我想在同一查询上使用 ORDER BY 和 GROUP BY。但如果我使用 Group BY,相关性就无法正常工作。

这是代码:

(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 的扩展,该扩展被明确记录为返回任意列值,而不是查询所需的值。您可以阅读here .

您可以通过使用子查询查找最大相关性来完成您想要的操作,如下所示:

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;

关于mysql - 按顺序按比赛分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21490484/

相关文章:

php - echo 语句中的 echo 变量

php - 在php中显示链接

mysql - 任何优化此查询的建议

c# - 以文本形式返回数字

python dataframe每组什么应用函数没有循环

C# MySql 连接器库存储在项目中?

c# - 将 SqlDataType 转换为 C# 枚举

sql - 在 Oracle SQL 中将许多列放在 group by 子句中

mysql - 在sql中按一定数量对行进行分组

mysql - 删除 MySQL 中除重复行之外的所有重复行?