3

I have a bit of a problem that I cannot solve. I am running the following through my database 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;
4
  • Probably so the OP only gets the 10 latest Commented Oct 23, 2013 at 12:56
  • because this will only return the first 10 results. I need it to return the last 10 but in the opposite order. Commented Oct 23, 2013 at 12:58
  • 1
    Duplicate of 10000000s exactly the same questions. Commented Oct 23, 2013 at 12:59
  • @Your Common Sense: Can you provide some candidates? Commented Jul 20, 2021 at 19:46

4 Answers 4

14

You can reorder that resultset by doing an 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;

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;
Sign up to request clarification or add additional context in comments.

1 Comment

That worked perfectly, I looked for ages for that answer, thanks. It did throw up the error 'Every derived table must have its own alias.' but I just had to add in the 'AS' to make it as follows: $strQuery = "select * FROM (select * from LastResult ORDER BY Date DESC LIMIT 10) AS Date ORDER BY Date";
0

You can do it in the query like this:

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

Comments

0

Try using this;

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

Comments

0

Don’t 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;

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.