al1en
al1en

Reputation: 511

echo in reverse order from mysql_fetch_assoc()

Ok here's the trick. In the query I'm getting the right results from a table named messages. (Its fetching the last 10 messages ordered by the time inserted in reversed order) here's the query:

$query = mysql_query("SELECT time, username, message
                      FROM messages ORDER BY time DESC LIMIT 10");

And than later those messages are printed inside div via ajax with

while ($item = mysql_fetch_assoc($query)) {
    echo $item['time']." - ".$item['username']." - ".$item['message'];
}

But the printed result I want to print them only in the reversed order. Tip: If I use ASC in the ORDER BY clause I don't get the last inserted messages.

Is this possible to do inside php?

Upvotes: 1

Views: 5208

Answers (3)

Touch
Touch

Reputation: 1491

Use: array_unshift - Prepend one or more elements to the beginning of an array

$items = array();

while($row = mysql_fetch_assoc($result)){
    array_unshift($items,$row);
}

foreach($items as $item){
   echo $item['time']." - ".$item['username']." - ".$item['message'];
}

Heres a useless but quick example. I hope it's still there: Simple example

Upvotes: 1

Kirk Logan
Kirk Logan

Reputation: 783

I would use a subquery personally. Im kinda anal about having my data come out of MySQL exactly how I want it, but the array_reverse method will work fine too. Here is my example:

$query = mysql_query("SELECT * FROM (
                      SELECT time, username, message
                      FROM messages ORDER BY time 
                      DESC LIMIT 10) result 
                      ORDER BY time ASC   
                    ");

Upvotes: 2

Rikesh
Rikesh

Reputation: 26441

Store your data & than use array_reverse,

while($row = mysql_fetch_assoc($result)){
    $items[] = $row;
}

$items = array_reverse($items ,true);

foreach($items as $item){
   echo $item['time']." - ".$item['username']." - ".$item['message'];
}

Upvotes: 6

Related Questions