2016-03-11 2 views
3

У меня есть 7 записей в таблице, но я хочу выбрать только последние 5 записей, сортируя по дате DESC. И я хочу показать эти записи в моей таблице, сортируя по дате ASC.выберите записи из базы данных базы данных по дате DESC, но я хочу показать записи в таблице на дату ASC

Мой код:

$select_record = mysqli_query($con, "select * from table order by date DESC limit 5"); 
while($row=mysqli_fetch_array($select_record)){ 

$date = $row['date']; 

echo "<tr><td>$date<br></td></tr>"; 

записей в моей таблице как этот

Date 
2014-05-15 
2014-04-15 
2014-06-15 
2014-02-15 
2014-07-15 
2014-01-15 
2014-03-15 

Мой код дать мне результат, как этот

Date 
2014-07-15 
2014-06-15 
2014-05-15 
2014-04-15 
2014-03-15 

Но я хочу привести, как это

Date 
2014-03-15 
2014-04-15 
2014-05-15 
2014-06-15 
2014-07-15 
+0

Привет, Ирфан, и добро пожаловать в StackOverflow. Пожалуйста, внимательно прочитайте «[Как задать хороший вопрос] (http://stackoverflow.com/help/how-to-ask)». – fusion3k

+1

Может быть, глупый вопрос, но .... почему вы ORER BY desc, когда на самом деле вы хотите ЗАКАЗАТЬ по asc? – VolkerK

+0

Я думаю, что он не хочет, чтобы цикл начал отсчет с 1-го месяца, но третий. idk, я запутался. – andre3wap

ответ

0

Корректировать время цикла:

Вместо того, чтобы сделать это:

while($row=mysqli_fetch_array($select_record)){ 

$date = $row['date']; 

echo "<tr><td>$date<br></td></tr>"; 

} 

Попробуйте сделать это:

create an array that can store your date values retrieved from query 
    while($row=mysqli_fetch_array($select_record)){ 

    $date = $row['date']; 
    Add $date to the array you created 

    } 
    Iterate the array from the END to START and print dates . 
    { 
     echo "<tr><td>$date<br></td></tr>"; 
    } 
4

ли второй ВЫБРАТЬ поверх первой:

SELECT t.* FROM 
    (SELECT * FROM `table` ORDER BY `date` DESC LIMIT 5) t 
ORDER BY t.`date` ASC 

короткая версия:

(SELECT * FROM `table` ORDER BY `date` DESC LIMIT 5) ORDER BY `date` ASC 
+1

Вы можете даже опустить внешний SELECT '(выберите * из таблицы, по дате DESC limit 5) ORDER BY \' date \ 'ASC', см. Http://sqlfiddle.com/#!9/cf441/1 – VolkerK

+0

@VolkerK да, я был смущен первым SELECT перед круглыми скобками в вашем комментарии, вот почему я удалил мое потом. :) – mitkosoft

0

Попробуйте это:

$select_record = mysqli_query($con, "select * from table order by date DESC limit 5"); 

// Sort in chronological order. 
usort($select_record, function($a, $b) { 
    return strcmp($a['db'], $b['db']); 
}); 

while($row=mysqli_fetch_array($select_record)){ 

$date = $row['date']; 

echo "<tr><td>$date<br></td></tr>"; 
0

Простым решением будет извлечение строк и обратный список на земле PHP. Это было бы моим решением в вашем простом случае на основе размера результата.

Если вы действительно хотите это сделать, не сохраняя полный результат на земле PHP, вы можете сделать это с помощью суб-выбора. Это означало бы заменить ваше выражение запроса с:

$select_record = mysqli_query($con, "SELECT * FROM (select * from table order by date DESC limit 5) AS result ORDER BY date"); 

Но я думаю, что это будет меньше, чем просто ремонтопригодны реверсирования результат в PHP.

0

Вы также можете сохранить результат в массиве. Затем вы можете использовать sort($array);

PHP function Sort

Смежные вопросы