我有一個 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 雜湊確保具有相同名稱的行在整個輸出中均勻分佈,而隨機值確保行的順序是隨機的。