对SQL查询而不是表进行排序


Sort an SQL query not a table

我有一个数据库,其中包含大量信息,用户可以使用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