我可以订购随机结果吗?

时间:2014-09-25 14:25:10

标签: random

我想从表格中随机抽取3条记录,然后将它们命令到“sponsor_ranking”字段。

我的代码阅读。

 $sql = "SELECT * FROM $TableSponsors ORDER BY RAND(), sponsor_ranking asc LIMIT 3";

但它并没有按照“sponsor_ranking”的顺序排序结果,而是将结果随机化。

有什么建议吗?

谢谢。

3 个答案:

答案 0 :(得分:2)

当然,sponsor_ranking排序仅在每个记录具有相同的RAND()值时才有用,这种情况不太可能。

你可以像这样解决它。按随机顺序,限制为3,由sponsor_ranking再次订购。

SELECT * FROM 
  (SELECT * FROM $TableSponsors 
  ORDER BY RAND()
  LIMIT 3) x
ORDER BY
  sponsor_ranking

答案 1 :(得分:0)

你可以在for子句中创建一个子表:

$sql = "SELECT * FROM (SELECT * FROM $TableSponsors ORDER BY RAND() LIMIT 3) Faketable ORDER BY sponsor_ranking";

答案 2 :(得分:0)

这永远不会奏效。使用多个字段执行order by要求“早期”字段具有相同的值,即使要考虑第二个和后续字段。

您必须使用子查询来执行rand()排序,然后按父查询中的其他字段排名:

SELECT *
FROM (
    SELECT *
    FROM $TableSponsors
    ORDER BY RAND()
) as foo
ORDER BY sponsor_ranking
LIMIT 3

e.g。如果你的桌子有这个:

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