我想從表中隨機抽出3條記錄,然後將它們排序到「sponsor_ranking」字段。我可以訂購隨機結果嗎?
我的代碼閱讀。
$sql = "SELECT * FROM $TableSponsors ORDER BY RAND(), sponsor_ranking asc LIMIT 3";
但它沒有按照「sponsor_ranking」的順序排序結果,但它是隨機化結果。
有什麼建議嗎?
謝謝。
我想從表中隨機抽出3條記錄,然後將它們排序到「sponsor_ranking」字段。我可以訂購隨機結果嗎?
我的代碼閱讀。
$sql = "SELECT * FROM $TableSponsors ORDER BY RAND(), sponsor_ranking asc LIMIT 3";
但它沒有按照「sponsor_ranking」的順序排序結果,但它是隨機化結果。
有什麼建議嗎?
謝謝。
當然,如果每個記錄具有相同的RAND()
值,那麼按sponsor_ranking
進行排序纔有用,因爲該值不太可能。
你可以這樣解決。隨機排列,限制爲3個,由sponsor_ranking再次排列。
SELECT * FROM
(SELECT * FROM $TableSponsors
ORDER BY RAND()
LIMIT 3) x
ORDER BY
sponsor_ranking
你可以做在一個子表的條款:
$sql = "SELECT * FROM (SELECT * FROM $TableSponsors ORDER BY RAND() LIMIT 3) Faketable ORDER BY sponsor_ranking";
這不會有任何效果。使用多個字段做order by
要求「更早」的字段對於第二個和後續字段具有相同的值,以便被考慮。
你必須使用子查詢做蘭特()排序,然後在父查詢其他領域排名:
SELECT *
FROM (
SELECT *
FROM $TableSponsors
ORDER BY RAND()
) as foo
ORDER BY sponsor_ranking
LIMIT 3
例如如果你的表有這樣的:
x y
1 5
1 6
2 7
3 8
4 9
... ORDER BY x DESC, y ASC
,那麼你會得到
x y
4 9 // only one "4", so 9 is ignored, no point in sorting a single value
3 8 // only one "3", so 8 is ignored, no point in sorting a single value
2 7 // ditto
1 5 // hey, there's two "1" values, so now the second field **IS** sorted
1 6
我覺得這個答案是錯誤的。 ORDER BY RAND現在不做任何事情。您只需通過「sponsor_ranking」訂購併獲得前三名。 – GolezTrol 2014-09-25 14:33:58
謝謝你..你的這個解決方案可以完美運行。 – Cavemanharris 2014-09-25 14:53:09
[不客氣](http://stackoverflow.com/help/someone-answers):) – GolezTrol 2014-09-25 16:36:17