我有一个数据库,其中包含大量信息,用户可以使用PHP与MySQL数据库进行通信来查询这些信息。我还想把他们的结果限制在最多300个结果,我已经成功地做到了。不过,我也想按数据集名称对结果进行排序。有没有一种方法可以对结束查询进行排序,而不是对原始表进行排序?根据我在网上读到的内容,查询中的ORDERBY语句对整个表进行排序,然后执行查询(或类似的操作)。对查询进行排序会更高效,因为你只需要对15条记录进行排序,而不是1500000条。如果有帮助的话,我会使用以下语法将结果打印到页面上:
while ($row = mysql_fetch_array($result)) {
...
}
感谢
如果结果集受到限制,请将其保存到php数组中,然后使用php排序函数:http://php.net/manual/en/function.usort.php
$all = array();
while ($res = mysql_fetch_array($result)) {
$all[] = $res;
}
usort($all, function($a,$b) {
return $a['field'] < $b['field'];
});
只需确保排序依据有一个合适的索引,并且排序选项应该非常快。在LIMIT之前/之后排序的问题是,如果可能的话(它有一点GROUP BY逻辑),它会改变你得到的实际结果,而不仅仅是它们返回的顺序。
要创建一个子表并仅对其进行排序,您可以尝试以下操作:
Select * from ( QUERY limit 300) a order by COLUMN