За последние 24 часа нас посетили 56552 программиста и 7232 робота. Сейчас ищут 2927 программистов ...

Не могу вывести статьи в обратном порядке

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

  1. fanat

    fanat Новичок

    С нами с:
    1 апр 2016
    Сообщения:
    35
    Симпатии:
    0
    Здравствуйте. В таблице article есть определенное кол-во статей. На странице они выводятся в порядке возрастания. В итоге, самые новые статьи оказываются на самой последней странице.
    Пытаюсь выводить в обратном порядке таким образом:
    PHP:
    1. for ($i = $num_result; $i>0; $i--) {
    2.     $row = mysql_fetch_array($result);
    3. //остальной код
    4. }
    Но толку от этого нет. Они как выводились по возрастанию, так и выводятся.
    И еще 1 вопрос: как сделать так, чтобы автоинкриментирование учитывало удаленные ранее материалы?
    Я раньше добавил, допустим до 100 статьей, а потом удалил их. По сути, оно должно начать снова присваивать номера от 1 до 100, но оно присваивает 101, 102 и т.д.
     
  2. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.543
    Симпатии:
    623
    Не спеши, вникай в свой код.
    Функция mysql_fetch_array() извлекает по одной записи из $result в том порядке, в каком они были получены от базы данных. Условия цикла ни на что не влияют.
    Лучше всего изменить запрос к базе, добавить в конец оператор DESC.
    Еще можно собрать все статьи в массив и из него уже с помощью обратного отсчета вывести статьи.
     
  3. fanat

    fanat Новичок

    С нами с:
    1 апр 2016
    Сообщения:
    35
    Симпатии:
    0
    PHP:
    1. $result = mysql_query("SELECT * FROM article
    2.                      LIMIT $quantity OFFSET $list
    3.                      ORDER BY id DESC;");
    Если так, то, мне выдает ошибку mysql_num_rows() expects parameter 1 to be resource, boolean given in
    На вот этой строке
    PHP:
    1. $num_result = mysql_num_rows($result);
     
  4. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.151
    Симпатии:
    108
    Адрес:
    Украина
    Зачем точка с запятой после "DESC"?
     
  5. fanat

    fanat Новичок

    С нами с:
    1 апр 2016
    Сообщения:
    35
    Симпатии:
    0
    Где-то прочитал, что в конце sql-запроса всегда ставится точка с запятой.
    Но и без неё не работает
     
  6. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.151
    Симпатии:
    108
    Адрес:
    Украина
    У тебя скорее всего возвращается ложь (false) в результате запроса. Вот и ругается функция, в которую нужно помещать выборку.
     
  7. fanat

    fanat Новичок

    С нами с:
    1 апр 2016
    Сообщения:
    35
    Симпатии:
    0
    И я понять не могу почему запрос не работает. Без LIMIT и OFFSET все хорошо, а с ними не работает.
    Может быть нельзя сортировать данные, если указан лимит?
     
  8. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.543
    Симпатии:
    623
    что говорит
    Код (Text):
    1. echo mysql_error();
    ?
     
  9. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.151
    Симпатии:
    108
    Адрес:
    Украина
    А ты можешь выбрать что-то одно, LIMIT или OFFSET. Я не уверен, но судя по тому что пишет справочник, нужно использовать или то или то.
     
  10. fanat

    fanat Новичок

    С нами с:
    1 апр 2016
    Сообщения:
    35
    Симпатии:
    0
    Без DESC работает и LIMIT, и OFFSET.
    Ошибка выдает следующее: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'ORDER BY id DESC' at line 3
     
  11. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.151
    Симпатии:
    108
    Адрес:
    Украина
    Попробуй так:
    PHP:
    1. $result = mysql_query("SELECT * FROM article ORDER BY id DESC LIMIT $quantity OFFSET $list");
    --- Добавлено ---
    Или без OFFSET $list
     
  12. fanat

    fanat Новичок

    С нами с:
    1 апр 2016
    Сообщения:
    35
    Симпатии:
    0
    Работает) В жизни не думал, что в запросе важна последовательность. Спасибо!