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

Форум MySQL

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Ещё одна сортировка

Сообщения:  [1-10]   [11-20] 

 
 автор: cheops   (30.12.2004 в 23:18)   письмо автору
 
   для: cheops   (07.12.2004 в 11:51)
 

Самым быстрым, но не самым элегантным и производительным способом решить проблему пропущенных месяцев будет вставить лишние SQL-запросы-проверки на манер:
<?php 
  
include "config.php"
  
// Выясним для начала самую первую и самую последнюю 
  // дату новости в базе данных 
  
$query "SELECT MIN(time) AS min, MAX(time) AS max FROM themes"
  
$mm mysql_query($query); 
  if(!
$mm) exit(mysql_erorr()); 
  
$minmax mysql_fetch_array($mm); 
  
// Первая дата - переводим в секунды с 1 января 1970 года 
  
$mintime strtotime($minmax['min']); 
  
// Последняя дата - переводим в секунды с 1 января 1970 года 
  
$maxtime strtotime($minmax['max']); 
  
// Цикл по годам 
  
for($i date("Y",$mintime); $i<=date("Y",$maxtime); ++$i
  { 
    
// Печатаем год 
    
echo "$i :"
    
// Выводим месяцы 
    
$begin 1
    
$end   12
    
// Если это первый год, то месяцы 
    // отсчитываем не сначала года 
    
if($i == date("Y",$mintime)) $begin date("n"$mintime); 
    
// Если это последний год, то месяцы 
    // отсчитываем не до конца 
    
if($i == date("Y",$maxtime)) $end date("n"$maxtime); 
    
// В цикле выводим ссылки 
    
for($k $begin$k<=$end; ++$k)
    {
      
$query "SELECT COUNT(*) FROM themes WHERE YEAR(time) = $i AND MONTH(time) = $k";
      
$tot mysql_query($query);
      if(!
$tot) exit(mysql_error());
      if(
mysql_result($tot,0)>0) echo "<a href=index.php?year=$i&month=$k>".convert_month($k)."</a>  "
    }
    echo 
"<br>"
  } 
  
// Возвращаем месяц по номеру 
  
function convert_month($m
  { 
    
$month = array(1=>"Январь""Февраль""Март""Апрель""Май""Июнь""Июль""Август""Сентябрь""Октябрь""Ноябрь""Декабрь"); 
    return 
$month[$m]; 
  } 
?>

   
 
 автор: cheops   (30.12.2004 в 10:20)   письмо автору
 
   для: BAHO   (30.12.2004 в 09:34)
 

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

   
 
 автор: BAHO   (30.12.2004 в 09:34)   письмо автору
 
   для: BAHO   (29.12.2004 в 11:13)
 

пробовал ввести в цикл месяцев запрос к базе, но что-то не получается

   
 
 автор: BAHO   (29.12.2004 в 11:13)   письмо автору
 
   для: cheops   (28.12.2004 в 22:57)
 

к сожалению, месяц не один, а бывает штуки 3-4, а что мол так и так не очень подходит. придётся всётаки воротить, вот только как? в скрипте сверху я пытался исключить переменную $k, если ей нет соответствия в базе, но всё равно не получается

   
 
 автор: cheops   (28.12.2004 в 22:57)   письмо автору
 
   для: BAHO   (28.12.2004 в 19:54)
 

Это нужно уже на базу данных завязываться, т.е. переделать весь скрипт... будем всё курочить? Или всё-таки, если нет новостей, то можно оставить вежливое сообщением, что мол так и так, но новостей в этом месяце не было... Это я к чему, вы говорили, что новостей обычно много и если это только один такой аномальный месяц, то это будет выглядеть нормально...

   
 
 автор: BAHO   (28.12.2004 в 19:54)   письмо автору
 
   для: cheops   (08.12.2004 в 16:13)
 

Теперь такая проблема, как мне выкинуть месяцы из цикла месяцов, которых нет в базе, т.е. если у меня нет ни одной новости за июнь, то и в цикле месяцев июня не будет

   
 
 автор: cheops   (08.12.2004 в 16:13)   письмо автору
 
   для: BAHO   (08.12.2004 в 16:01)
 

Лучше избегать называть столбцы названиями ключевых слов MySQL - в принципе это будет работать иногда когда анализатор отличит названия столбца от типа или названия функции, но часть клиентов (вроде phpMyAdmin) очень любят ключевые слова переводить в верхний регистр... Короче можно приобрести много трудноотыскиваемых жучков...

   
 
 автор: BAHO   (08.12.2004 в 16:01)   письмо автору
 
   для: cheops   (08.12.2004 в 14:46)
 

я не знаю, в чём была фишка и почему из-за имени столбца ничего не работало, но всё заработало!
ОГРОМНОЕ ВАС СПАСИБО!

   
 
 автор: cheops   (08.12.2004 в 14:46)   письмо автору
 
   для: BAHO   (08.12.2004 в 08:33)
 

Попробуйте заменить имя столбца date на какое-нибудь другое - скорее всего из-за этого не работает.

   
 
 автор: BAHO   (08.12.2004 в 08:33)   письмо автору
 
   для: cheops   (07.12.2004 в 23:48)
 

CREATE TABLE 'ks_news' (
  'id' int(11) NOT NULL auto_increment,
  'date' date default '0000-00-00',
  'title' varchar(100) NOT NULL default '',
  'news' text,
  'goarch' varchar(20) NOT NULL default '',
  'arch_news' text,
  PRIMARY KEY  ('id')
);
INSERT INTO 'ks_news' VALUES (1, '2004-04-10', 'Название новости', 'Новость', 'qwerty', Новость в архиве');

   

Сообщения:  [1-10]   [11-20] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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