使用 MySQL 資料庫時,通常需要在確保特定順序的同時擷取資料子集。常見的場景是選擇記錄的隨機樣本(例如使用者),然後根據特定屬性(例如名稱)進一步組織結果。
初步嘗試實現這將使用以下查詢:
<code class="sql">SELECT * FROM users WHERE 1 ORDER BY rand(), name ASC LIMIT 20</code>
但是,此查詢可能無法提供預期結果,因為rand() 函數對整個資料集進行隨機排序,不保證後續名稱ASC 排序。
為了有效實現隨機化,同時確保基於名稱的排序,建議使用子查詢方法:
<code class="sql">SELECT * FROM ( SELECT * FROM users ORDER BY rand() LIMIT 20 ) T1 ORDER BY name </code>
在此查詢中,最裡面的子查詢( SELECT * FROM users ORDER BY rand() LIMIT 20) 選出20 位使用者的隨機樣本。 LIMIT 20 子句確保只回傳 20 行。
然後外部查詢使用子查詢的結果作為其輸入,以 T1 表示。它應用 ORDER BY name 子句按名稱升序組織子查詢結果。這有效地將初始選擇的隨機性與所需的基於名稱的排序結合起來。
透過採用此子查詢方法,您可以擷取使用者的隨機樣本,並按預期根據其名稱按字母順序對它們進行排序。
以上是如何在 MySQL 中結合隨機選擇和基於名稱的排序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!