我找不到任何类似的问题。
CREATE TABLE IF NOT EXISTS `test` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`Nombre` varchar(50) COLLATE utf8_spanish2_ci DEFAULT NULL,
`Orden` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 COLLATE=utf8_spanish2_ci;
INSERT INTO `test` (`Id`, `Nombre`, `Orden`) VALUES
(1, 'Mark', NULL),
(2, 'David', 1),
(3, 'John', 1),
(4, 'David', 2),
(5, 'John', 3),
(6, 'John', 2),
(7, 'William', NULL);
正如我们所看到的,约翰和大卫不止一行,还有一个order列,所以我们可以简单地使用order-by-name asc,order-asc进行排序,但这并不是我需要的。。
问题是:我想知道是否可以按名称排序,并为每个名称创建某种类型的组,然后按其顺序排序,然后按rand()应用最终顺序,这样您仍然可以查看david、mark、john和william的所有行,但顺序是随机的。。
所以每次运行查询时,顺序都是完全随机的,但仍然有一些顺序。。
这是一把小提琴http://sqlfiddle.com/#!9/038bd7/7号
2条答案
按热度按时间sqougxex1#
此查询:
返回表中每个唯一名称的随机数。
将它连接到表中,首先按该随机数排序,然后按
Orden
:请看演示。
结果:
wd2eg0qa2#
嗯,我真的以为这样行得通,但似乎不行。不管怎样,我都会把它贴出来,以防它能激励其他人。。。
这似乎奏效了。。。