Reverse order of sql query output

心不动则不痛 提交于 2020-01-03 19:05:09

问题


I have a bit of a problem that I cannot solve. I am running the following through my DB using PHP:

$strQuery = "select * from LastResult ORDER BY Date DESC LIMIT 10";

The results all come back fine and as expected, however I then have to feed these into a line chart but when I do so, they are obviously displayed in reverse as I have the DB to return them in DESC by Date which means the most recent will be the first returned.

Is there a way that after returning these results I can reverse their order before feeding the data to my chart.

Here is the full query (please don't comment about the use of mysql instead of mysqli, I didn't write that bit)

$strQuery = "select * from LastResult ORDER BY Date DESC LIMIT 10";

$result3 = mysql_query($strQuery) or die(mysql_error());

if ($result3) {
    while($ors4 = mysql_fetch_array($result3)) {
        $NumberResults2 = $ors4['Date'];

        $strQuery = "select AvGoalDifference as Average from LastResult where Date= '$NumberResults2'";

        $result4 = mysql_query($strQuery) or die(mysql_error()); 
        $ors3 = mysql_fetch_array($result4); 

        $strXML .= "<set label='" . $NumberResults2 . "' value='" . $ors3['Average'] . "' />";

        mysql_free_result($result4);
    }
}

mysql_close($link);

$strXML .= "</chart>";
$chart2 = renderChart("charts/Line.swf", "", $strXML, "AverageGD", 500, 260, false, true, true);

echo $chart2;

回答1:


You can re order that resultset by doing a outer select and ordering it the way you want (ASC):

SELECT * FROM (
    select * from LastResult ORDER BY Date DESC LIMIT 10
) as
ORDER BY Date ASC;

Edit: If this fails (as it would in postgresql 9.3.4), use an alias for the inner select to make it as below:

SELECT * FROM (
    select * from LastResult ORDER BY Date DESC LIMIT 10
) as foo
ORDER BY foo.Date ASC;



回答2:


You can do it in the query like this:

$strQuery = "select * FROM (select * from LastResult ORDER BY Date DESC LIMIT 10) ORDER BY Date";



回答3:


I would post this as a comment, but I have not enough privileges to do that.

Dont forget to alias the inner selection or mysql will produce an error.

SELECT * FROM (
    select * from LastResult ORDER BY Date DESC LIMIT 10
) aliasT
ORDER BY Date ASC;



回答4:


If your using google line charts, then reversing the order can be done at the time of drawing the chart.

hAxis {
    direction: -1
}

I had 3 dates, 01/01, 01,02, 01,03, 01/04 I wanted the first 3 but to show in order of date, not pick last three in reverse! This fixed my problem.




回答5:


Try using this;

SELECT * FROM (
    select * from LastResult ORDER BY Date DESC LIMIT 10
)
ORDER BY Date ASC;


来源:https://stackoverflow.com/questions/19542296/reverse-order-of-sql-query-output

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!