84669 人学习
152542 人学习
20005 人学习
5487 人学习
7821 人学习
359900 人学习
3350 人学习
180660 人学习
48569 人学习
18603 人学习
40936 人学习
1549 人学习
1183 人学习
32909 人学习
我有一个 MySQL 查询,它以随机顺序输出行。
每行都有一个 name 列,有时查询可能会产生重复的行(name 具有相同值的行) - 这是设计使然。< /p>
name
但是,有时查询会意外地将输出中的重复行直接分组在一起。
我正在尝试找到一种方法,在输出中均匀分布具有重复名称的行,以便重复的行不会意外地组合在一起。
实现此目的的一种方法是修改 MySQL 查询以包含额外的排序条件,以确保具有相同名称的行在整个输出中均匀分布。
下面是完成此操作的示例查询:
SELECT * FROM my_table ORDER BY name, RAND();
此查询首先按名称对行进行排序,然后按 RAND() 函数生成的随机值对行进行排序。随机值确保具有相同名称的行在整个输出中随机分布,而不是分组在一起。
请注意,在 ORDER BY 子句中使用 RAND() 函数的计算成本可能很高,并且对于大型表来说可能无法很好地扩展。如果是这种情况,您可以考虑使用不同的确定性函数(例如名称的 MD5 哈希值)来获得类似的结果。
SELECT * FROM my_table ORDER BY MD5(name), RAND();
此查询首先按名称的 MD5 哈希对行进行排序,然后按 RAND() 函数生成的随机值对行进行排序。 MD5 哈希确保具有相同名称的行在整个输出中均匀分布,而随机值确保行的顺序是随机的。
实现此目的的一种方法是修改 MySQL 查询以包含额外的排序条件,以确保具有相同名称的行在整个输出中均匀分布。
下面是完成此操作的示例查询:
此查询首先按名称对行进行排序,然后按 RAND() 函数生成的随机值对行进行排序。随机值确保具有相同名称的行在整个输出中随机分布,而不是分组在一起。
请注意,在 ORDER BY 子句中使用 RAND() 函数的计算成本可能很高,并且对于大型表来说可能无法很好地扩展。如果是这种情况,您可以考虑使用不同的确定性函数(例如名称的 MD5 哈希值)来获得类似的结果。
此查询首先按名称的 MD5 哈希对行进行排序,然后按 RAND() 函数生成的随机值对行进行排序。 MD5 哈希确保具有相同名称的行在整个输出中均匀分布,而随机值确保行的顺序是随机的。