我需要订购从最新到最新的访问列表,可以使用表主键Id来完成。但现在我想将对第二个键定义的同一文档的访问权限分组。
所以如果有这个结果:
我需要按此顺序显示:
我需要按主要ID排序,然后按文件名分组......
谢谢大家
答案 0 :(得分:0)
这是一个很好的问题;但它没有示例表或代码,因此我假设您的表结构如下:
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...');
我发现请求的订单有点棘手,所以我想首先我们需要对ids进行排序&然后将其用作子查询,如下所示:
SELECT GROUP_CONCAT(id) ids FROM `test` GROUP BY `name` ORDER BY `id` DESC
给出了结果:
ids
199985,199983
199984
198911,198910
正如您可能知道的那样,您不能使用返回超过1行的子查询来执行任何有用的操作,因此我需要使用另一个group_concat
来组合结果
为了实现这一点,我们需要添加另一个列来强制mysql在一个组中使用它,因为上面的结果与我们可以分组没有相似之处。
结果查询:
SELECT GROUP_CONCAT(`ids`) FROM(
SELECT GROUP_CONCAT(id) ids, 'x' as `useful_column`
FROM `test` GROUP BY `name` ORDER BY `id` DESC) `table`
正如预期的那样效果很好,我们得到了ID的组合结果如下:
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和amp;我实际上并不确定find_in_set会有多快或者是否有任何其他限制