Тема: Вывод из базы вывод задом наперед
Используя
while ($value2 = mysql_fetch_array ($value1))
Мы получаем вывод из базы в той последовательности, в которой записаны данные в ней!
А как сделать вывод задом наперед?
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форум PHP-MyAdmin.RU → Работа с phpMyAdmin → Вывод из базы вывод задом наперед
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Используя
while ($value2 = mysql_fetch_array ($value1))
Мы получаем вывод из базы в той последовательности, в которой записаны данные в ней!
А как сделать вывод задом наперед?
А как сделать вывод задом наперед?
Надо править SQL запрос указав в нем поле и направление обратной сортировки DESC.
SELECT ...
ORDER BY `field_name` DESC
Спасибо!)
А ещё такой вопрос, а как ограничить количество выводимых строк...
Например, я делаю объявления и мне нужно выводить 3-и объявления на одну страницу. То есть всего 6-ть объявлений, 1,2,3 - на одной, 4,5,6 - на другой
В конец SQL запроса добавьте LIMIT
SELECT ...
LIMIT 0, 3
-- Второй вариант будет:
LIMIT 3, 3
Спасибо!
И ещё такой вопрос.
Нужно сделать так, чтобы в таблице 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>';
Нет так не пойдет это не верно Вы должны если у вас событие по java скрипту то писать в нем чтоб по клику у Вас выполнялся скрипт на сервере а уже в нем сценарий MySQL запроса с увеличением значения в таблице.
Смысл что при клике к переменной в ячейке прибавляеться +1 и все реализация может быть разной, тут по желанию.
Если ссылка на файл то можно сделать счетчик как у меня на странице http://www.it-favourite.ru/translate.php - вообще вариантов много счетчиков.
Надо править allannouncement.php и в нем прописать SQL запрос увеличивающий счетчик кликов через UPDATE.
Если поле для хранения просмотров будет `views`, а поле идентификатора статьи `id`, то запрос будет таким:
UPDATE `announcement`
SET `views` = `views` + 1
WHERE `id` = 24;
24 - в данном случае будет значением идентификатора статьи.
Все SQL запросы сперва проверяйте в phpMyAdmin, чтобы убедиться в их работоспособности.
Огромное спасибо!)))
ещё назрел вопросик, никак не могу его побороть.
хочу сделать нумерацию страниц для вывода, из базы, новостей с лимитом 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))
Обратите внимание на LIMIT. Сразу после него идет значение переменной $exec и они слипаются в LIMIT1, что вызывает ошибку. Всегда перехватывайте ошибки. Так же обратите внимание на LIMIT $exec, $num.
$announcements = mysql_query ("SELECT * FROM announcement ORDER BY `code` DESC LIMIT $exec, $num", $db) or exit(mysql_error());
Доброго времени суток!)
Решил сделать "пагинатор". Нашел пример и начал делать по аналогу. Но не все работает!
Сначала формирую сам "пагинатор" (работает):
$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;
}
Функцию вижу, но она не вызывается нигде почему-то. И обратите внимание на переменную $page, которая должна содержать номер текущей страницы.
$count = ceil ($c);
$menu = createMenu($count, $page);
echo $menu;
Посмотрите еще здесь: http://forum.php-myadmin.ru/viewtopic.p … 8971#p8971
Смотрел ваш пример, не получается сделать.
$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 'Переглядів: ';
echo $myannouncements[5];
echo ' ♦ ';
echo 'Додав: ';
echo $myannouncements[6];
echo ' ♦ ';
echo 'Дата: <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
З.Ы. При вставке большого текста, вопрос, который блокирует "большой" спам не имеет ячейки для ввода числа!) Пришлось написать короткое сообщение, а потом его "изменить"!)
Ошибка в поле count.
$res = mysql_query("SELECT COUNT(*) AS `count` FROM `announcement`", $db);
Исправил, но не работает.
Исправил, но не работает.
Проверьте запросы и значения переменных. Выполнение запросов смотрите в phpMyAdmin.
exit($aCount['count']);
exit($iOffsetLimit);
не написал конект к базе...
и нашел ещё одну ошибочку у себя:
echo '<a href="announcement?page=' . $i . '">...</a>' . "\n";
echo '<a href="announcement.php?page=' . $i . '">...</a>' . "\n";
Спасибо огромное!!!)
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форум PHP-MyAdmin.RU → Работа с phpMyAdmin → Вывод из базы вывод задом наперед
Форум работает на PunBB, при поддержке Informer Technologies, Inc
Currently installed 7 official extensions. Copyright © 2003–2009 PunBB.