【问题标题】:how to sort a dataset in PHP?如何在 PHP 中对数据集进行排序?
【发布时间】:2013-03-08 20:02:05
【问题描述】:

我正在使用 PDO 连接到我在数据库中的表。所以我写了一个快速函数来返回从数据表返回的结果。是的,我可以在查询中使用 SORT BY 对结果进行排序,但我想在此查询中避免这种情况,因为此查询会为大表提取信息。

* 首先我需要能够在用户端对这个数据集进行排序。所以我需要以某种方式按不同的列排序,这样我就可以按列“fullName”排序或按“userID”或“createdDate”排序

所以当 PDO 获取结果并返回我想要排序的数组时。

* 第二个问题,我在这个函数中的什么地方做一个免费的结果,还是在查询之外释放它们?

function getDataSet($query, $connection){

    $cmd = $connection->query( $query );
    return $cmd->fetchAll();  //PDO::FETCH_ASSOC

}

然后我可以通过简单地调用这个函数

$dataset = getDataSet("select * from users", $db)

在我的第一个问题中,我想对 $dataset 进行排序。

【问题讨论】:

  • 你说的“大桌子”是什么意思?
  • 让我直截了当地说,您有一个针对数据排序进行了优化的数据库系统,而您希望在未优化的系统中进行。您能解释一下为什么要避免使用有效的解决方案而使用低效的解决方案吗?
  • @didierc 一百多条记录!
  • 我想不出任何情况下ORDER BY 查询不会更快。当然,这也可以根据用户的输入进行动态化。
  • 抱歉,我们仍然不同意。如果表被正确优化(正确的索引等),在 SQL 中排序仍然会更快。如果您真的有一个没有的超自然场景,您必须向我们展示真实的东西,以便我们可以帮助您。

标签: php mysql sorting multidimensional-array


【解决方案1】:

我不同意您在 SQL 语句中不使用“ORDER BY”的观点。但无论如何,你可以试试这个:

$tmp_dataset = array();
foreach($dataset as $data)
{
    $tmp_dataset[ $data['name_of_column'] ] = $data;
}

$dataset = $tmp_dataset;

ksort($dataset);

【讨论】:

  • 这就是我们不喜欢这个想法的原因。看一下这个。对于 1000 行,您必须在内存中设置全部 1000 条记录,并为接下来的 1000 行做临时数组。这样,您将使用 2 倍以上的内存。 SQL 查询中的排序不会影响查询的速度,无论您的查询有多复杂(仅当您按顺序进行一些字符串操作时)。
  • 如果您不相信有无订单的完整查询。我敢打赌,这种差异会很有趣。哦,别忘了测量在 PHP 端对相同数据进行排序所需的时间并与我们分享:]
  • 我现在明白你的意思了。我一直认为排序方式会使查询变慢。谢谢你的澄清。我想这留下了第二个问题,在我的函数中我在哪里释放结果?
  • 我确实提到他应该使用 order by。 @Mike 请澄清你的第二个问题
  • @redmoon7777,当我使用 order by 按日期时间字段排序时,它会将我的运行时间增加至少 10 秒。请在此其他帖子stackoverflow.com/questions/15512839/… 上达到顶峰,我在其中发布了我的实际查询和列类型。我的第二个问题是什么时候在上面的代码中我可以释放 PDO 返回的结果
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-01
  • 2021-09-08
  • 2015-10-01
  • 2021-07-31
相关资源
最近更新 更多