За последние 24 часа нас посетили 20299 программистов и 1677 роботов. Сейчас ищет 1491 программист ...

Выборка из бд в обратном порядке

Тема в разделе "PHP для новичков", создана пользователем san4ez, 13 авг 2016.

  1. san4ez

    san4ez Активный пользователь

    С нами с:
    13 авг 2016
    Сообщения:
    331
    Симпатии:
    47
    Доброго времени суток. Проблема такая: делаю выборку из бд (по id) и мне выводит в таком порядке строки:
    9
    8
    7
    6
    5
    а мне нужно наоборот, т.е.
    5
    6
    7
    8
    9
    Как это возможно сделать? Вот код:

    PHP:
    1. $connection = mysqli_connect('localhost', 'dbuser', 'dbpass', 'dbname') or die(mysqli_error());
    2. $query = "SELECT * FROM tablename ORDER BY id DESC LIMIT 5";
    3. $result = mysqli_query($connection, $query) or die(mysqli_error());
    4.  
    5. while ( $row = mysqli_fetch_assoc($result) ){
    6.  
    7.     echo '    <tr>
    8.                <td>'.$row['id'].'</td>
    9.                <td>'.$row['date'].'</td>
    10.                <td>'.$row['name'].'</td>
    11.            </tr>';
    12.      
    13. }
    находил функцию array_reverse(), но не понимаю как ее применить (и возможно ли в моем случае). Помогите новичку =)
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Убрать из запроса ключевое слово DESC
     
  3. san4ez

    san4ez Активный пользователь

    С нами с:
    13 авг 2016
    Сообщения:
    331
    Симпатии:
    47
    тогда выводит с 1 id, а мне надо именно последние 5 строк
     
  4. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Понял. Тогда оставь старый запрос. Выбранные кортежи сохрани в массив, разверни его, и потом уже данные из него выводи.
     
  5. san4ez

    san4ez Активный пользователь

    С нами с:
    13 авг 2016
    Сообщения:
    331
    Симпатии:
    47
    эмм.. а как развернуть? с помощью array_reverse() ?
     
  6. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
  7. san4ez

    san4ez Активный пользователь

    С нами с:
    13 авг 2016
    Сообщения:
    331
    Симпатии:
    47
    попробую...
    --- Добавлено ---
    неполучается ничего...
     
  8. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Покажи как пробуешь
     
  9. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.589
    Симпатии:
    1.763
    @san4ez, как пробовал? Надо накопить сначала в массиве записи
    PHP:
    1. while($row=mysqli_fetch_assoc($result)){ $arr[]=$row; }
    А потом применить array_reverse к $arr
     
  10. san4ez

    san4ez Активный пользователь

    С нами с:
    13 авг 2016
    Сообщения:
    331
    Симпатии:
    47
    я с массивами не умею работать, мне сейчас проще в переменную записать последний id-5 и в запросе к бд указать что б не выводил строки меньше этой, тогда без DESC будет работать)
     
  11. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Ну как бы работать с массивами надо научиться до того как начинаешь работать с СУБД. Это вообще базис. Один из типов данных в языке.
     
  12. san4ez

    san4ez Активный пользователь

    С нами с:
    13 авг 2016
    Сообщения:
    331
    Симпатии:
    47
    вообще ничего не выводит если так делаю

    я в курсе, но пока пишу мини програмку чисто для себя )
     
  13. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    покажи код. Нужно понимать, как ты понял предложенный тебе алгоритм.
     
  14. san4ez

    san4ez Активный пользователь

    С нами с:
    13 авг 2016
    Сообщения:
    331
    Симпатии:
    47
    PHP:
    1. $connection = mysqli_connect('localhost', 'dbuser', 'dbpass', 'dbname') or die(mysqli_error());
    2. $query = "SELECT * FROM tablename ORDER BY id DESC LIMIT 5";
    3. $result = mysqli_query($connection, $query) or die(mysqli_error());
    4. while ( $row = mysqli_fetch_assoc($result) ){
    5. $arr[]=$row;
    6. $q = array_reverse($arr);
    7.  
    8.     echo '    <tr>
    9.               <td>'.$q['id'].'</td>
    10.               <td>'.$q['date'].'</td>
    11.               <td>'.$q['name'].'</td>
    12.           </tr>';
    13.    
    14. }
     
  15. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Тебе неплохо бы алгоритмизацию программирования подтянуть.
    PHP:
    1. $arr = [];
    2. while($row = mysqli_fetch_assoc($result){
    3.   $arr[] = $row;
    4. }
    5.  
    6. $arr = array_reverse($arr)
    7.  
    8. foreach($arr as $row)
    9. {
    10.   echo '';
    11. }
     
    san4ez нравится это.
  16. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Логично. Я опечатался. Баг для меня известный - клавиатура залита чем-то сладким. Но твоя проблема не в том, что я опечатался, а в том, что ты не знаком с основами. Не только с массивами, но и с синтаксисом языка. Просто добавь ; в конец строки разворота массива.
     
    san4ez нравится это.
  17. san4ez

    san4ez Активный пользователь

    С нами с:
    13 авг 2016
    Сообщения:
    331
    Симпатии:
    47
    блин... удалил случайно сообщение, нашел уже ошибку, все работает) спасибо, буду разбираться и учить)