MySQL中两个交替列的复杂顺序

MySQL中两个交替列的复杂顺序,mysql,Mysql,我需要一个从最新到最新的访问列表,可以使用表主键Id来完成。但是现在我想对第二个键定义的同一文档的访问进行分组 因此,如果a有这个结果: 1995年Clase Just Vet+Marzo Sol Supuestos 254 y 255 Parte 199984年Clase Just Vet+Marzo Justidiccion Voluntaria(20- 199983 Clase Just Vet+Marzo Sol Supuestos 254 y 255 Parte 198911 Cla

我需要一个从最新到最新的访问列表,可以使用表主键Id来完成。但是现在我想对第二个键定义的同一文档的访问进行分组

因此,如果a有这个结果:

  • 1995年Clase Just Vet+Marzo Sol Supuestos 254 y 255 Parte
  • 199984年Clase Just Vet+Marzo Justidiccion Voluntaria(20-
  • 199983 Clase Just Vet+Marzo Sol Supuestos 254 y 255 Parte
  • 198911 Clase Just Vet+Marzo Repaso Contencioso管理员
  • 198910 Clase Just Vet+Marzo Repaso Contencioso管理员
我需要按此顺序显示:

  • 1995年Clase Just Vet+Marzo Sol Supuestos 254 y 255 Parte
  • 199983 Clase Just Vet+Marzo Sol Supuestos 254 y 255 Parte
  • 199984年Clase Just Vet+Marzo Justidiccion Voluntaria(20-
  • 198911 Clase Just Vet+Marzo Repaso Contencioso管理员
  • 198910 Clase Just Vet+Marzo Repaso Contencioso管理员
我需要按主ID排序,然后按文档名称分组


谢谢大家

这是一个好问题;但它缺少示例表或代码,因此我假设您的表结构如下:

CREATE TABLE `test` (
  `id` int(10) UNSIGNED NOT NULL,
  `name` varchar(255) NOT NULL
)

INSERT INTO `test` (`id`, `name`) VALUES
(199985, 'Clase Just Vet+Marzo Sol Supuestos 254 y 255 Parte...'),
(199984, 'Clase Just Vet+Marzo Jurisdiccion Voluntaria (20-...'),
(199983, 'Clase Just Vet+Marzo Sol Supuestos 254 y 255 Parte...'),
(198911, 'Clase Just Vet+Marzo Repaso Contencioso Administra...'),
(198910, 'Clase Just Vet+Marzo Repaso Contencioso Administra...');
SELECT GROUP_CONCAT(id) ids FROM `test` GROUP BY `name` ORDER BY `id` DESC
199985,199983,199984,198911,198910  
我发现请求的顺序有点棘手,因此我认为首先需要对ID进行排序和分组,然后将其用作子查询,如下所示:

CREATE TABLE `test` (
  `id` int(10) UNSIGNED NOT NULL,
  `name` varchar(255) NOT NULL
)

INSERT INTO `test` (`id`, `name`) VALUES
(199985, 'Clase Just Vet+Marzo Sol Supuestos 254 y 255 Parte...'),
(199984, 'Clase Just Vet+Marzo Jurisdiccion Voluntaria (20-...'),
(199983, 'Clase Just Vet+Marzo Sol Supuestos 254 y 255 Parte...'),
(198911, 'Clase Just Vet+Marzo Repaso Contencioso Administra...'),
(198910, 'Clase Just Vet+Marzo Repaso Contencioso Administra...');
SELECT GROUP_CONCAT(id) ids FROM `test` GROUP BY `name` ORDER BY `id` DESC
199985,199983,199984,198911,198910  
结果如下:

ids 
199985,199983   
199984  
198911,198910   
您可能知道,不能使用返回超过1行的子查询来执行任何有用的操作,因此我需要使用另一个
group\u concat
为了实现这一点,我们需要添加另一个列,以强制mysql在GroupBy中使用它,因为上面的结果与我们可以分组的结果没有相似之处

结果查询:

SELECT GROUP_CONCAT(`ids`) FROM( 
          SELECT GROUP_CONCAT(id) ids, 'x' as `useful_column` 
          FROM `test` GROUP BY `name` ORDER BY `id` DESC) `table`
正如预期的那样,这工作得很好,我们得到了ids的组合结果,如下所示:

CREATE TABLE `test` (
  `id` int(10) UNSIGNED NOT NULL,
  `name` varchar(255) NOT NULL
)

INSERT INTO `test` (`id`, `name`) VALUES
(199985, 'Clase Just Vet+Marzo Sol Supuestos 254 y 255 Parte...'),
(199984, 'Clase Just Vet+Marzo Jurisdiccion Voluntaria (20-...'),
(199983, 'Clase Just Vet+Marzo Sol Supuestos 254 y 255 Parte...'),
(198911, 'Clase Just Vet+Marzo Repaso Contencioso Administra...'),
(198910, 'Clase Just Vet+Marzo Repaso Contencioso Administra...');
SELECT GROUP_CONCAT(id) ids FROM `test` GROUP BY `name` ORDER BY `id` DESC
199985,199983,199984,198911,198910  
这是您问题中提到的排序顺序;现在,要实际获得您想要的排序结果,您只需将此结果与select组合,如下所示:

SELECT * FROM `test` ORDER BY FIND_IN_SET(`id`, 
(SELECT GROUP_CONCAT(`ids`) FROM( 
 SELECT GROUP_CONCAT(id) ids, 'x' as `useful_column` FROM `test` 
 GROUP BY `name` ORDER BY `id` DESC) `table`));

请记住我之所以讨论这个问题,是因为我觉得这个问题很有趣,我想尝试解决它,所以这个解决方案可能不是最好的,因为group_concat有一个限制,我不确定find_in_set的速度有多快,或者是否有任何其他限制

您能提供sql和示例tabl吗你试过了吗?