我想从表中随机抽出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