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

Форум 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