Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Помогите с сортировкой в новостях
 
 автор: maxfade   (01.05.2007 в 14:06)   письмо автору
 
 

Мой код вот такой:

<?php
  
///////////////////////////////////////////////////
  // Блок "Новости"
  // 2003-2006 (C) IT-студия SoftTime (http://www.softtime.ru)
  // Симдянов И.В. (simdyanov@softtime.ru)
  // Голышев С.В. (softtime@softtime.ru)
  ///////////////////////////////////////////////////
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Новости</title>
<link rel="StyleSheet" type="text/css" href="news.css">
</head>
<?php
  
// Выставляем уровень обработки ошибок (http://www.softtime.ru/info/articlephp.php?id_article=23)
  
Error_Reporting(E_ALL & ~E_NOTICE);

  
// Этот файл выводит первые $pnumber новостей
  // Устанавлинваем соединение с базой данных
  
require_once("../config.php");
?>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<p class="zagblock">НОВОСТИ</p>
<?php
  
// Выясняем общее количество новостей в базе данных, для того чтобы
  // правильно отображать ссылки на последующие новости.
  
$tot mysql_query("SELECT count(*) FROM news WHERE hide='show' AND putdate <= NOW()");
  if (
$tot)
  {
    
$total mysql_result($tot,0);
    
// Если в базе новостей меньше чем $pnumber
    // выводим их без вывода ссылки "Все новости".
    
if($pnumber $total) echo "<p class='linkblock'><a href=news.php class='linkblock'>Все новости</a>";
  }
  else 
puterror("Ошибка при обращении к блоку новостей");
  
// Запрашиваем все видимые новости, т.е. те, у которых в базе данных hide='show',
  // если это поле будет равно 'hide', новость не будет отображаться на странице


// Переменная хранит число сообщений выводимых на станице
$num 3;
// Извлекаем из URL текущую страницу
$page $_GET['page'];
// Определяем общее число сообщений в базе данных

$result mysql_query("SELECT * FROM news");
$posts mysql_num_rows($result);
// Находим общее число страниц
$total floor (($posts 1) / $num) + 1;
// Определяем начало сообщений для текущей страницы
$page floor ($page);
// Если значение $page меньше единицы или отрицательно
// переходим на первую страницу
// А если слишком большое, то переходим на последнюю
if(empty($page) or $page 0$page 1;
  if(
$page $total$page $total;
// Вычисляем начиная к какого номера
// следует выводить сообщения
$start $page $num $num;
// Выбираем $num сообщений начиная с номера $start
$result mysql_query("SELECT `news`.`id_news` AS `id_news`,
            `news`.`name` AS `name`,
            `news`.`body` AS `body`,
            `news`.`intro` AS `intro`,
             DATE_FORMAT(putdate,'%d.%m.%Y') AS putdate_format,
            `news`.`url` AS `url`,
            `news`.`url_text` AS `url_text`,
            `news`.`url_pict` AS `url_pict`,
            `news`.`cat_id` AS `cat_id`,
            `news`.`autor` AS `autor`,
            `cat`.`cat_name` AS `cat_name`
             FROM `news`,`cat`
             WHERE `news`.`cat_id`=`cat`.`cat_id` AND hide='show' AND putdate <= NOW()
             ORDER BY putdate DESC

 LIMIT 
$start$num");
// В цикле переносим результаты запроса в массив $postrow
echo "<table>";
while ( 
$postrow mysql_fetch_array($result))

{


      
// Выводим заголовок новости
      
echo "<tr><td><a class=anewsblock href=news.php?id_news=".$postrow['id_news']."><p class=newsblockzag><b>".$postrow['name']."</b></p></a></td></tr>";
      echo 
"<tr><td><p id=bottom_text>Категория: &nbsp;<b>".$postrow['cat_name']."</b>&nbsp;|&nbsp;&nbsp;Создано:<em class=datanews>&nbsp;".$postrow['putdate_format']."</em></p></td></tr>";


      
// Выводим анонс
      
echo "<tr><td class=newsblock>".$postrow['intro'];

      echo 
"<tr><td><br /><p id=bottom_text>Автор:&nbsp;<b>".$postrow['autor']."</b>&nbsp;&nbsp;|&nbsp;&nbsp;<a class=anewsblock href=news.php?id_news=".$postrow['id_news'].">Подробнее...</a></td></tr>";




}
echo 
"</table><br /> <br />";


// Проверяем нужны ли стрелки назад
if ($page != 1$pervpage '<a class=page_nav href= ./index.php?page=1>Начало</a>
                               <a class=page_nav href= ./index.php?page='
. ($page 1) .'><</a> ';
// Проверяем нужны ли стрелки вперед
if ($page != $total$nextpage ' <a class=page_nav href= ./index.php?page='. ($page 1) .'>></a>
                                   <a class=page_nav href= ./index.php?page=' 
.$total'>Конец</a>';

// Находим две ближайшие станицы с обоих краев, если они есть
if($page 0$page2left ' <a class=page_nav href= ./index.php?page='. ($page 2) .'>'. ($page 2) .'</a> | ';
if(
$page 0$page1left '<a class=page_nav href= ./index.php?page='. ($page 1) .'>'. ($page 1) .'</a> | ';
if(
$page <= $total$page2right ' | <a class=page_nav href= ./index.php?page='. ($page 2) .'>'. ($page 2) .'</a>';
if(
$page <= $total$page1right ' | <a class=page_nav href= ./index.php?page='. ($page 1) .'>'. ($page 1) .'</a>';

// Вывод меню
echo '<center><div class=page_div>';
echo 
$pervpage.$page2left.$page1left.'<b>'.$page.'</b>'.$page1right.$page2right.$nextpage;
echo 
'&nbsp;&nbsp;(Всего:&nbsp;&nbsp;'.$total.')';
echo 
'</div></center>';
?>

<br /> <br />





Вопрос в следующем. Каким образом мне сделать сортировку по категориям, т.е. по cat_name?

Что за мега скрипт должен быть... Заранее спасибо.

   
 
 автор: ddhvvn   (01.05.2007 в 14:13)   письмо автору
 
   для: maxfade   (01.05.2007 в 14:06)
 

????
Так сортируйте по cut_name, а не по putdate ... ;)

   
 
 автор: maxfade   (01.05.2007 в 14:38)   письмо автору
 
   для: ddhvvn   (01.05.2007 в 14:13)
 

Мне надо отсортировать одновременно по cat_name и putedate. Я просто не очень сильно еще разбираюсь в PHP.
И еще, как я понимаю мне надо передавать значение cat_name в зависимости от того, что нажмешь, допустим - Категория Новости, у нее cat_id=1. Передачу осуществляьт как я понимаю сделав переменную типа $sort = $_GET['cat_id']; , далее $sort подставить в:

...
ORDER BY $sort  DESC
...


Правильно?

Напишите небольшой пример, желательно с использованием того, что написано выше...

   
 
 автор: ddhvvn   (01.05.2007 в 14:55)   письмо автору
 
   для: maxfade   (01.05.2007 в 14:38)
 


// Выбираем $num сообщений начиная с номера $start 
$result = mysql_query("SELECT `news`.`id_news` AS `id_news`, 
            `news`.`name` AS `name`, 
            `news`.`body` AS `body`, 
            `news`.`intro` AS `intro`, 
             DATE_FORMAT(putdate,'%d.%m.%Y') AS putdate_format, 
            `news`.`url` AS `url`, 
            `news`.`url_text` AS `url_text`, 
            `news`.`url_pict` AS `url_pict`, 
            `news`.`cat_id` AS `cat_id`, 
            `news`.`autor` AS `autor`, 
            `cat`.`cat_name` AS `cat_name` 
             FROM `news`,`cat` 
             WHERE `news`.`cat_id`=`cat`.`cat_id` AND hide='show' AND putdate <= NOW() 
             ORDER BY cat_name, putdate DESC LIMIT $start, $num"); 


Пробуйте...

   
 
 автор: maxfade   (01.05.2007 в 16:34)   письмо автору
 
   для: ddhvvn   (01.05.2007 в 14:55)
 

Это понятно, а как мне заставить выводиться определенную категорию по cat_name, причем с с ортировкой по дате? Остальные категории при этом скрывать?

   
 
 автор: ddhvvn   (01.05.2007 в 16:38)   письмо автору
 
   для: maxfade   (01.05.2007 в 16:34)
 

Так у Вас же это все уже сделано!
Ведь выборка приозводится по cat_name!
А, нет по cat_id...

Так по чем надо? по cat_id или по cat_name?
Какой-то запутанный скрипт... :-/

   
 
 автор: maxfade   (01.05.2007 в 16:59)   письмо автору
 
   для: ddhvvn   (01.05.2007 в 16:38)
 

Просто в скрипте идет объединение таблиц. Название категории берется из отдельной таблицы, соответственно у этих таблиц одинаковые значение по cat_id. И значение таблицы 1 сопоставляется со значением таблицы 2 по cat_id, ели оно равно, то подставляется значение cat_name из 2-й таблицы.

Вот дампы таблиц:


Структура таблицы `cat`
-- 

CREATE TABLE `cat` (
  `cat_id` int(11) NOT NULL auto_increment,
  `cat_name` tinytext NOT NULL,
  PRIMARY KEY  (`cat_id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=6 ;

-- 
-- Дамп данных таблицы `cat`
-- 

INSERT INTO `cat` VALUES (1, 'Новости');
INSERT INTO `cat` VALUES (2, 'Рассказы');
INSERT INTO `cat` VALUES (3, 'Анекдоты');
INSERT INTO `cat` VALUES (4, 'Стрим');





Структура таблицы `news`
-- 

CREATE TABLE `news` (
  `id_news` int(11) NOT NULL auto_increment,
  `cat_id` int(11) NOT NULL default '0',
  `autor` tinytext NOT NULL,
  `name` tinytext NOT NULL,
  `body` text NOT NULL,
  `intro` text NOT NULL,
  `putdate` datetime NOT NULL default '0000-00-00 00:00:00',
  `url` tinytext NOT NULL,
  `url_text` tinytext NOT NULL,
  `url_pict` tinytext NOT NULL,
  `hide` enum('show','hide') NOT NULL default 'show',
  PRIMARY KEY  (`id_news`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=15 ;



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

Вот это как раз меня и интересует.

   
 
 автор: maxfade   (02.05.2007 в 11:01)   письмо автору
 
   для: maxfade   (01.05.2007 в 16:59)
 

Неужели никто не подскажет?

   
 
 автор: Trianon   (02.05.2007 в 14:42)   письмо автору
 
   для: maxfade   (02.05.2007 в 11:01)
 

ORDER BY cat_name ASC, putdate DESC

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования