【问题标题】:Reverse results of PostgreSQL after using ORDER BY使用 ORDER BY 后 PostgreSQL 的反转结果
【发布时间】:2018-02-17 17:36:50
【问题描述】:

我有一个查询,我需要在我的数据库中选择最新的 25 个条目,但要反转该选择结果的顺序。

我想出了:

SELECT indexID, datetime, temperature FROM dataB WHERE userID="4236" ORDER BY indexID DESC, datetime ASC LIMIT 25

但我仍然按时间顺序从最新开始获得结果,但我希望在这 25 个最新的中按时间顺序最旧到最新。我正在使用 PHP 的 pg_fetch_row() 并创建一个带有结果的连接字符串并将其输入到 Morris.js 图表中,由于这个查询,我的数据正在向后绘制。

如何反转查询结果?

【问题讨论】:

标签: php postgresql-9.1 morris.js


【解决方案1】:

你应该试试这个,首先按降序获取数据,然后用作临时表,然后再次按升序选择

SELECT indexID, datetime, temperature FROM (SELECT indexID, datetime, temperature FROM dataB WHERE userID="4236" ORDER BY indexID DESC LIMIT 25) temp order by indexID ASC

【讨论】:

  • 我相信它会起作用,我已经编辑了它我在查询中犯了一点错误,但现在没问题
  • 我没有想过这样做,它合乎逻辑且干净,但我只是不明白“temp”来自哪里,因为它会引发错误。ERROR: column temp.indexid does not exist
  • (SELECT indexID, datetime, temperature FROM dataB WHERE userID="4236" ORDER BY indexID DESC LIMIT 25) order by indexID 试试这个我希望它会工作
  • ERROR: subquery in FROM must have an alias
  • 我会继续修改它,你指出了我正确的方向,Vinod
【解决方案2】:

不要将结果直接放入字符串,而是将它们加载到数组中。当数组已满时,使用array_reverse 函数反转数组中元素的顺序。您现在可以构建您的字符串并将数据传递到您的莫里斯图。

文档:http://php.net/manual/ro/function.array-reverse.php

【讨论】:

  • 不幸的是,我将数据输入 Morris.js 的方式,使它变成了一个字符串。 array_reverse 对此非常生气,因为它不再是数组了。
【解决方案3】:

尝试在查询中添加偏移量和限制。下面的示例显示了一个偏移量,它基本上获取与您的查询匹配的总行数并从中减去 25 以偏移您从与您的查询匹配的“倒数第 25”记录开始:

SELECT indexID, datetime, temperature
FROM dataB WHERE userID="4236"
ORDER BY indexID DESC, datetime ASC
LIMIT (( SELECT COUNT(indexID) FROM dataB WHERE userID="4236" )-25), 25;

【讨论】:

  • 这个来自的数据库将增长到一个非常大的规模,这不是需要越来越长的时间来处理吗?
猜你喜欢
  • 1970-01-01
  • 2013-11-19
  • 1970-01-01
  • 2021-03-22
  • 1970-01-01
  • 1970-01-01
  • 2021-05-28
  • 1970-01-01
  • 2011-09-13
相关资源
最近更新 更多