1 (изменено: Cular, 2011-01-03 15:43:15)

Тема: Вывод из базы вывод задом наперед

Используя

while ($value2 = mysql_fetch_array ($value1))

Мы получаем вывод из базы в той последовательности, в которой записаны данные в ней!
А как сделать вывод задом наперед?

2

Re: Вывод из базы вывод задом наперед

Cular сказал:

А как сделать вывод задом наперед?

Надо править SQL запрос указав в нем поле и направление обратной сортировки DESC.

SELECT ...
ORDER BY `field_name` DESC

3 (изменено: Cular, 2011-01-03 18:33:32)

Re: Вывод из базы вывод задом наперед

Спасибо!)
А ещё такой вопрос, а как ограничить количество выводимых строк...
Например, я делаю объявления и мне нужно выводить 3-и объявления на одну страницу. То есть всего 6-ть объявлений, 1,2,3 - на одной, 4,5,6 - на другой

4

Re: Вывод из базы вывод задом наперед

В конец SQL запроса добавьте LIMIT

SELECT ...
LIMIT 0, 3

-- Второй вариант будет:
LIMIT 3, 3

5

Re: Вывод из базы вывод задом наперед

Спасибо! smile

6

Re: Вывод из базы вывод задом наперед

И ещё такой вопрос.  big_smile
Нужно сделать так, чтобы в таблице announcement, в необходимой ячейке столбца views, при каждом клике на ссылку значение вырастало на 1.
Вот к чему я дошел своей головой:

echo '<a class="entryReadAllLink" href="allannouncement.php?code='.$myannouncements[0].'" onclick="$increm = mysql_query("INSERT INTO announcement (views) values('.$myview.' = '.$myannouncements[6].' + 1);");>Читати далі >></a>';

7 (изменено: DmitryV, 2011-01-07 15:06:37)

Re: Вывод из базы вывод задом наперед

Нет так не пойдет это не верно Вы должны если у вас событие по java скрипту то писать в нем чтоб по клику у Вас выполнялся скрипт на сервере а уже в нем сценарий MySQL запроса с увеличением значения в таблице.

Смысл что при клике к переменной в ячейке прибавляеться +1 и все реализация может быть разной, тут по желанию.
Если ссылка на файл то можно сделать счетчик как у меня на странице http://www.it-favourite.ru/translate.php - вообще вариантов много счетчиков.

8

Re: Вывод из базы вывод задом наперед

Надо править allannouncement.php и в нем прописать SQL запрос увеличивающий счетчик кликов через UPDATE.

Если поле для хранения просмотров будет `views`, а поле идентификатора статьи `id`, то запрос будет таким:

UPDATE `announcement`
SET `views` = `views` + 1
WHERE `id` = 24;

24 - в данном случае будет значением идентификатора статьи.

Все SQL запросы сперва проверяйте в phpMyAdmin, чтобы убедиться в их работоспособности.

9

Re: Вывод из базы вывод задом наперед

Огромное спасибо!)))

10

Re: Вывод из базы вывод задом наперед

ещё назрел вопросик, никак не могу его побороть.  sad
хочу сделать нумерацию страниц для вывода, из базы, новостей с лимитом 3.
Нумерация создается динамически:

include ("codes/db_connect.php");
              // Считаем количество строк в таблице и делим на заданное. Получится количество страниц
              $res = mysql_query("SELECT COUNT(*) AS `cnt` FROM announcement", $db);  
            $c = mysql_result($res, 0) / $num;
            $count = ceil ($c);
            // Формируем меню
               for($i = 1; $i <= $count; $i++)
               {
                   echo '<a href="announcement.php?page='. $i .'">'. $i .'</a>';
               }
               mysql_close ($db);

Делаю вывод, но ничего не выводит, что не так?

$num = 3;
          // Принимаем номер требуемой страницы      
        $page = !empty($_GET['page']) ? (int)$_GET['page'] : 1;
          include ("codes/db_connect.php");
          $exec = ($page - 1) * $num;
        $announcements = mysql_query ("SELECT * FROM announcement ORDER BY `code` DESC LIMIT".$exec, $db);
        while ($myannouncements = mysql_fetch_array ($announcements))

11

Re: Вывод из базы вывод задом наперед

Обратите внимание на LIMIT. Сразу после него идет значение переменной $exec и они слипаются в LIMIT1, что вызывает ошибку. Всегда перехватывайте ошибки. Так же обратите внимание на LIMIT $exec, $num.

$announcements = mysql_query ("SELECT * FROM announcement ORDER BY `code` DESC LIMIT $exec, $num", $db) or exit(mysql_error());

12 (изменено: Cular, 2011-01-17 12:26:29)

Re: Вывод из базы вывод задом наперед

Доброго времени суток!)
Решил сделать "пагинатор". Нашел пример и начал делать по аналогу. Но не все работает!
Сначала формирую сам "пагинатор" (работает):

  
            $res = mysql_query("SELECT COUNT(*) AS `cnt` FROM announcement", $db);  
            $c = mysql_result($res, 0) / $num;
            $count = ceil ($c);
            // Формируем меню
            for($i = 1; $i <= $count; $i++)
            {
                   echo '<a href="announcement.php?page='. $i .'">'. $i .'</a>';
            }

Потом в примере показано, как его оптимизировать на случай миллионов записей и удобности (не работает):

            $res = mysql_query("SELECT COUNT(*) AS `cnt` FROM announcement", $db);  
            $c = mysql_result($res, 0) / $num;
            $count = ceil ($c);
            // Формируем меню 
            function createMenu($count, $page)
            {   
                $menu = '';    
                for($i = 1; $i <= $count; $i++)
                {
                   if($i == $page)
                       $menu .= '<b>'. $i .'</b>';
                   else
                       $menu .= '<a href="announcement.php?page='. $i .'">'. $i .'</a> ';           
                }
                return $menu;
            }

13

Re: Вывод из базы вывод задом наперед

Функцию вижу, но она не вызывается нигде почему-то. И обратите внимание на переменную $page, которая должна содержать номер текущей страницы.

$count = ceil ($c);
$menu = createMenu($count, $page);
echo $menu;

Посмотрите еще здесь: http://forum.php-myadmin.ru/viewtopic.p … 8971#p8971

14 (изменено: Cular, 2011-01-21 19:19:56)

Re: Вывод из базы вывод задом наперед

Смотрел ваш пример, не получается сделать.

                $num = 3;
          $res = mysql_query("SELECT COUNT(*) AS `cnt` FROM announcement", $db);  
           $aCount = mysql_fetch_assoc($res);
           //Узнаем количество необходимых страниц
           $iPages = ceil($aCount['count'] / $num);
           //Проверка текущей страницы
           $page = (isset($_GET['page']) && $_GET['page'] <= $aCount['count']) ? $_GET['page'] : 1;
           //Определения нужного текста для вывода
           $iOffsetLimit = ($page - 1) * $num;
        $iStart = ($page > 5) ? $page - 4 : 1;
          
          $announcements = mysql_query ('SELECT * FROM announcement ORDER BY `code` DESC LIMIT ' . $iOffsetLimit . ',' . $num, $db) or exit(mysql_error());
        while ($myannouncements = mysql_fetch_array ($announcements))
        {
            echo '<table border="0" cellspacing="0" cellpadding="0" width="100%">';
            echo '<tbody>';
            echo '<tr>';
            echo '<td style="padding:3px">';
            echo '<div style="text-align:left" class="eTitle"><a href="allannouncement.php?code='.$myannouncements[0].'">';
            echo $myannouncements[1];
            echo '</a>';
            echo '</div>';
            echo '<div style="text-align:left; clear:both; padding-top:2px; padding-bottom:2px" class="eMassage">';
            echo $myannouncements[2];
            echo '<p align="center"><img src="';
            echo 'image/announcement/';
            echo $myannouncements[4];
            echo '" /></p> ';
            echo '</div>';
            echo ' <div style="clear:both;" class="eDetails">';
            echo '<div style="float:right">';
            echo '<span class="entryReadAll">';
            echo '<a class="entryReadAllLink" href="allannouncement.php?code='.$myannouncements[0].'">Читати далі >></a>';
            echo '</span>';
            echo '</div>';
            echo 'Переглядів:&nbsp';
            echo $myannouncements[5];
            echo '&nbsp&diams;&nbsp';
            echo 'Додав:&nbsp';
            echo $myannouncements[6];
            echo '&nbsp&diams;&nbsp';
            echo 'Дата:&nbsp<span title="18:21">';
            echo $myannouncements[7];
            echo '</span>';
            echo '</div>';
            echo '</td>';
            echo '</tr>';
            echo '</tbody>';
            echo '</table>';
            echo '<br />';
           }
           
           //вывод пагинатора
           echo '<div class="catPages" align="center" style="clear:both" id="pagesBlock">';  
        if ($iPages > 1) 
        {
            echo '<div>Страницы: ';
            for ($i = $iStart; $i <= $iPages; $i++) 
            {
                if ($page > 4 && $i == $page - 4)
                {
                    echo '<a href="announcement?page=' . $i . '">...</a>' . "\n";
                    continue;
                }
                    if ($i > $page + 3) 
                    {
                        echo '<a href="announcement?page=' . $i . '">...</a>' . "\n";
                        break;
                    }
                    if ($i == $page) 
                    {
                        echo ' <b> ' . $i . ' </b> ' . "\n";
                    } 
                    else 
                    {
                        echo '<a href="announcement?page=' . $i . '">' . $i . '</a>' . "\n";
                    }
               }
            echo '</div>' . "\n";
        }
           mysql_close ($db);

Исходя из своего мизерного опыта могу лишь предположить, что неправильно сделана логика:

$num = 3;

$page = (isset($_GET['page']) && $_GET['page'] <= $aCount['count']) ? $_GET['page'] : 1;
$iOffsetLimit = ($page - 1) * $num;

$announcements = mysql_query ('SELECT * FROM announcement ORDER BY `code` DESC LIMIT ' . $iOffsetLimit . ',' . $num, $db) or exit(mysql_error());

Потому, что по-умолчанию мы попадаем на 1-ю страницу и в переменную $page попадет 1, но при выполнении действия, результат которого попадает в $iOffsetLimit, получается 0.
А запрос не возвращает ничего, тестил в phpmyadmin:

SELECT * FROM announcement ORDER BY `code` DESC LIMIT 0

З.Ы. При вставке большого текста, вопрос, который блокирует "большой" спам не имеет ячейки для ввода числа!) Пришлось написать короткое сообщение, а потом его "изменить"!)

15

Re: Вывод из базы вывод задом наперед

Ошибка в поле count.

$res = mysql_query("SELECT COUNT(*) AS `count` FROM `announcement`", $db);

16

Re: Вывод из базы вывод задом наперед

Исправил, но не работает.

17

Re: Вывод из базы вывод задом наперед

Cular сказал:

Исправил, но не работает.

Проверьте запросы и значения переменных. Выполнение запросов смотрите в phpMyAdmin.

exit($aCount['count']);
exit($iOffsetLimit);

18

Re: Вывод из базы вывод задом наперед

не написал конект к базе...  big_smile
и нашел ещё одну ошибочку у себя:

echo '<a href="announcement?page=' . $i . '">...</a>' . "\n";
echo '<a href="announcement.php?page=' . $i . '">...</a>' . "\n";

Спасибо огромное!!!)