我有一个 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 哈希确保具有相同名称的行在整个输出中均匀分布,而随机值确保行的顺序是随机的。