我想在分组后随机化我的数据。我怎样才能以优雅的方式做到这一点呢?
这里我创建了SQLFiddle演示。
预期结果,
金,金2,金3,银3,银,青铜
金2,金3,金,银,银3,青铜
金,金3,金2,银,银3,青铜
青铜、银3、银、金2、金、金3等。
简而言之,应该先按字母顺序(名称)对它们进行分组,然后在内部随机分组数据。
我试过了
按名称从
type顺序选择* RAND()
这是按名字排序的,但不是随机的。
从
type组中通过RAND()按名称顺序选择*
这将数据随机化,但不分组。
发布于 2014-06-17 06:17:03
使用substring_index(col, ' ', 1)将字符串值拆分为单个空格分隔符,并获得第一个令牌,并将其用作您的一阶条件。在您的二阶标准中,使用rand(),以便具有相同首单词的名称被随机化。
select name
from type
order by substring_index(name, ' ', 1), rand()这里的假设是您的name列上的单词总是以单个空格分隔。
编辑
下面是关于substring_index的更多示例
select substring_index('hello world', ' ', 1); -- 'hello'
select substring_index('hello', ' ', 1); -- 'hello'
select substring_index('hello_world foo', ' ', 1); -- 'hello_world'
select substring_index('yippie ki yay', ' ', 2); -- 'yippie ki'发布于 2014-06-17 06:14:47
尝试这样做,如果您知道要订购的substr中的最大字符,那么name将提高性能:
SELECT * FROM type ORDER BY substr(name,1,4), rand();在@gerrytan上面的答案中,使用substring_index来实现现实生活中所期望的结果。
SQLFiddle演示
发布于 2014-06-17 06:16:08
试一试
SELECT * FROM `type` ORDER BY `name`, `name` RLIKE '^.[:num]+$', RAND();SQL DEMO
https://stackoverflow.com/questions/24256572
复制相似问题