Heim > Fragen und Antworten > Hauptteil
Ich habe eine MySQL-Abfrage, die Zeilen in zufälliger Reihenfolge ausgibt.
Jede Zeile hat eine name
列,有时查询可能会产生重复的行(name
Zeile mit dem gleichen Wert) – das ist beabsichtigt. < /p>
Aber manchmal gruppieren Abfragen versehentlich doppelte Zeilen direkt in der Ausgabe.
Ich versuche eine Möglichkeit zu finden, Zeilen mit doppelten Namen in der Ausgabe gleichmäßig zu verteilen, damit doppelte Zeilen nicht versehentlich in Gruppen zusammengefasst werden.
P粉3114235942023-09-14 09:16:23
实现此目的的一种方法是修改 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 哈希确保具有相同名称的行在整个输出中均匀分布,而随机值确保行的顺序是随机的。