mysqldumper
-


Hinweise


Antwort
 
LinkBack Themen-Optionen Thema durchsuchen Thema bewerten
Alt 14.08.2004, 17:40   #1
TP-Greis
 
Benutzerbild von Boris
 
Registriert seit: Mar 2001
Ort: Berlin, Germany
Boris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKE
Arrow

[MySQL + PHP] Jahres/Monats Archiv realisieren - wie am besten?


Ich erstelle derzeit ein kleines Newssystem, das auch eine Archivfunktion besitzen soll.

Im Moment überlege ich mir, wie ich die dynamische Erzeugung am besten realisiere. Was ich möchte, ist dass das Skript automatisch ermittelt, wieviele News es in der Vergangenheit gab und dementsprechend als Liste anbietet, ungefähr so:

2004: · Jan · Feb · Mär · Apr · Mai · Jun · Jul · Aug · Sep · Okt · Nov · Dez

Wenn es in einem Monat eine oder mehr News gab, soll der Monat nicht als Text dargestellt werden, sondern als Link. Eine Vorschau:
http://web11.p15131386.pureserver.info/archiv/

Vorgehensweise:
Als erstes muss das Script ja ermitteln, wieviele verschiedene "Jahre" enthalten sind.

Dann muss es zu den gefundenen Jahren ermitteln, in welchen der 12 Monaten auch News geschrieben wurden.

Hat ein Monat einen oder mehrere Einträge, wird der Monat markiert (er wird zum Link).

Ich habe im Moment noch überhaupt keinen Ansatz, wie ich das realisieren soll. Das Datum aller News ist im MySQL-Eigenen Format DATE gespeichert (sprich: 2003-04-23).

Sowas ähnliches habe ich hier gesehen:
http://www.waferbaby.com/archives/

Hat jemand einige Tips, Ideen oder Vorschläge?
__________________
My software never has bugs. It just develops random features ...

» DevShack - die Website des freien Webentwicklers Boris
Boris ist offline   Mit Zitat antworten


Alt 14.08.2004, 18:40   #2
TP-Urgestein
 
Benutzerbild von webcreate
 
Registriert seit: Nov 2003
Ort: NRW
webcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichts
Vielleicht ein Anfang.
Hier werden die Monate aber als Ziffer dargestellt und es werden auch nur die dargestellt, welche News haben.
Hoffe das ich nun richtig gezählt habe, da ich es mit einem TIMESTAMP arbeite.
Zur Not musst Du halt die substr Werte anpassen.
PHP-Code:
   $result mysql_query("SELECT datum, titel FROM news ORDER BY datum");
   
$jahr = array();
   
$monat = array();
   while (
$smeldung mysql_fetch_array($result)) {
       if(
$smeldung['titel'] != "") {
           
$sjahrsubstr($smeldung['datum'],0,4);
           if(!
in_array($sjahr,$jahr)) {
               
array_push($jahr,$sjahr);
           } 
           
$smonatsubstr($smeldung['datum'],0,7);
           if(!
in_array($smonat,$monat)) {
               
array_push($monat,$smonat);
           } 
           
       }
   }
   foreach(
$jahr as $showjahr){
       echo 
$showjahr.": - ";
       foreach(
$monat as $showmonat){
           if(
substr($showmonat,0,4)==$showjahr){
             echo 
"<a href='#' target='_blank'>".substr($showmonat,5,2)."</a>&nbsp;-&nbsp;";
           }
       }
       echo 
"<hr>";
   } 
__________________
Gruß Mark
Mein Blog zum TP || XING Profil || grafiker.de Profil || How to use GOOGLE
emCalculator 1.0

webcreate IT SOLUTIONS
www.webcreate-nrw.de
webcreate ist offline   Mit Zitat antworten
Alt 15.08.2004, 00:08   #3
TP-Greis
 
Benutzerbild von Boris
 
Registriert seit: Mar 2001
Ort: Berlin, Germany
Boris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKE
Hab mal eine andere Variante ausprobiert:

PHP-Code:
<?php
require $_SERVER['DOCUMENT_ROOT']."/inc/config.php";

$m2Str=array('','Jan','Feb','Mär','Apr','Mai','Jun','Jul','Aug','Sep','Okt','Nov','Dez');

$ergebnis=mysql_query("
                        SELECT
                            MONTH(datum) AS currMonth,
                            YEAR(datum) AS currYear,
                            COUNT(id) AS anzahl
                        FROM
                            news
                        GROUP BY
                            YEAR(datum),
                            MONTH(datum)
                        ORDER BY
                            YEAR(datum) DESC,
                            MONTH(datum) ASC"
);
    
$currYear=NULL;
    
$Yearstart=NULL;
    while (
$daten mysql_fetch_array($ergebnis))
    {
        if(
$currYear!=$daten['currYear'])
        {
            if(
$Yearstart>0) echo "\r\n            </p><hr />\r\n";
            echo 
"            <p class=\"newstext\"><strong>".$daten['currYear']."</strong>\r\n                <br />";
            
$currYear=$daten['currYear'];
            
$Yearstart++;
        }

        if(
$daten['anzahl']>0)
        {
            echo 
" · <a title=\"".$daten['anzahl']." News in diesem Monat\" class=\"nonfett\" href=\"/archiv/".$daten['currYear']."/".$daten['currMonth']."/\">";
        }

        echo 
$m2Str[$daten['currMonth']]." (".$daten['anzahl'].")";

        if(
$daten['anzahl']>0)
        {
            echo 
"</a>";
        }
    }
?>
Funktioniert soweit tadellos, leider zeigt er so aber auch NUR die Monate an, die auch eine News haben. *grübel*
__________________
My software never has bugs. It just develops random features ...

» DevShack - die Website des freien Webentwicklers Boris
Boris ist offline   Mit Zitat antworten
Alt 15.08.2004, 03:42   #4
TP-Supporter
 
Registriert seit: Feb 2003
Ort: Bremen
H3ck|0 ist auf einem guten Weg
So klappts bei mir auf jeden Fall (außer einem... nämlich wenn 1 Jahr lang keine News eingetragen wurden...)
Und da sich die Anzahl der Monate im Jahr wohl so schnell nich ändern wird
kann man die doch einfach per for-Schleife durchgehen
PHP-Code:
$sql "SELECT DISTINCT(YEAR(`date`)) AS `year` FROM `archiv`;";
$res1 mysql_query($sql,$connection);
      
while(
$line mysql_fetch_array($res1))
{
 echo 
$line['year']."<br>";
 for(
$i=1;$i<=12;$i++)
 {
  
$sql 'SELECT `id` FROM `archiv` WHERE MONTH(`date`) = \''.$i.'\' AND YEAR(`date`) = \''.$line['year'].'\';';
  
$res2 mysql_query($sql,$connection);
  
$res3 mysql_fetch_array($res2);
  if (!empty(
$res3))
  {
   echo 
'<a href="#">'.$m2Str["$i"]."</a> ";
  } else {
   echo 
$m2Str["$i"];
  };
 };
 echo 
'<br>';
}; 
__________________
The truth You hear may not be the truth You think it is

Geändert von H3ck|0 (15.08.2004 um 03:45 Uhr).
H3ck|0 ist offline   Mit Zitat antworten
Alt 15.08.2004, 04:26   #5
TP-Urgestein
 
Benutzerbild von webcreate
 
Registriert seit: Nov 2003
Ort: NRW
webcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichts
Nun erklärt mich für bekloppt, aber es hat mir einfach keine Ruhe gelassen.
Das hier sollte eigentlich immer funktionieren und zeigt auch alle Monate an.
Einmal wird die Summe der Jahresbeiträge angezeigt und dann beim Monat die Monatssumme.
Die Monate mit News fungieren dann auch als Link.
Die Links sind nun immer so aufgebaut, dass die Monate mit führender 0 (also: 01, 02, 03, ...) hinterlegt sind.
Ist das nicht der fall, dann bei der Linkausgabe anstatt
substr($showmonat,5,2)
einfach
$dummy
eintragen, dann ist die führende 0 raus.
PHP-Code:
 <?
  
// Include für DB-Connection
  
include("open.inc.php");
  
  
$result mysql_query("SELECT datum FROM new ORDER BY datum");
  
$jahr = array();
  
$cjahr = array();
  
$monat = array();
  
$m2Str=array('','Jan','Feb','Mär','Apr','Mai','Jun','Jul','Aug','Sep','Okt','Nov','Dez');
  while (
$smeldung mysql_fetch_array($result)) {
      
$sjahrsubstr($smeldung['datum'],0,4);
      if(!
in_array($sjahr,$jahr)) {
          
array_push($jahr,$sjahr);
      } 
      
array_push($cjahr,$sjahr);
      
$smonatsubstr($smeldung['datum'],0,7);
      
array_push($monat,$smonat);
  }
  
$counterj array_count_values($cjahr);
  
$counterm array_count_values($monat);
  
arsort($jahr);
  foreach(
$jahr as $showjahr){
     echo 
"<strong>".$showjahr."&nbsp;(".$counterj[$showjahr].") :</strong><br>&nbsp;-&nbsp;";
      
$container = array();
      
$container2 =array();
      foreach(
$monat as $showmonat){
          if(
substr($showmonat,0,4)==$showjahr){
              if(
substr($showmonat,5,1)==0){
                 
$ausgabe $m2Str[substr($showmonat,6,1)];
                 
$dummy substr($showmonat,6,1);
                  
array_push($container2,$dummy);
              }
              else{
                 
$ausgabe $m2Str[substr($showmonat,5,2)];
                 
$dummy substr($showmonat,5,2);
                  
array_push($container2,$dummy);
              }
              for(
$k=1;$k<=$dummy;$k++){
                  if(
$k!=$dummy){
                     if(!
in_array($k,$container)) {
                   
array_push($container,$k);
                      echo 
$m2Str[$k]."&nbsp;-&nbsp;";
                      }
                      else{
                      }
                  }
                  else{
                     if(!
in_array($k,$container)) {
                   
array_push($container,$k);
                      echo 
"<a href='/archiv/".substr($showmonat,0,4)."/".substr($showmonat,5,2)."/' target='_blank'>".$ausgabe."</a> (".$counterm[$showmonat].")&nbsp;-&nbsp;";
                      }
                  }
              }
          }
      }
      if(
$container2[count($container2)-1] != 12){
          for(
$n=$container2[count($container2)-1];$n<=12;$n++){
              if(!
in_array($n,$container)) {
                 echo 
$m2Str[$n]."&nbsp;-&nbsp;";
              }
          }
      }
      echo 
"<hr>";
  }
  
?>
__________________
Gruß Mark
Mein Blog zum TP || XING Profil || grafiker.de Profil || How to use GOOGLE
emCalculator 1.0

webcreate IT SOLUTIONS
www.webcreate-nrw.de
webcreate ist offline   Mit Zitat antworten
Alt 15.08.2004, 04:49   #6
TP-Supporter
 
Registriert seit: Feb 2003
Ort: Bremen
H3ck|0 ist auf einem guten Weg
ok.. *für bekloppt erklär*

Als Antwort kommt dann aber von mir die Bitte selbiges mit mir zu tun
Hab mal eben die Zähler ergänzt...

PHP-Code:
$m2Str=array('','Jan','Feb','Mär','Apr','Mai','Jun','Jul','Aug','Sep','Okt','Nov','Dez'); 

$connection = @mysql_connect($db_host,$db_user,$db_pw) or die("Datenbankfehler: Keine Verbindung möglich");

   
mysql_select_db($db_db);
     
$sql "SELECT DISTINCT(YEAR(`date`)) AS `year` FROM `archiv` ORDER BY `year`;";
$res1 mysql_query($sql,$connection);
  
while(
$line mysql_fetch_array($res1))
{
 
$sql 'SELECT COUNT(`id`) AS \'count\' FROM `archiv` WHERE YEAR(`date`) = '.$line['year'].';';
 
$res2 mysql_query($sql$connection);
 
$line2 mysql_fetch_array($res2);
 echo 
'<div style="font-weight:bold;">'.$line['year'].' ('.$line2['count'].')</div>';
 for(
$i=1;$i<=12;$i++)
 {
  
$sql 'SELECT COUNT(`id`) AS \'count\' FROM `archiv` WHERE MONTH(`date`) = \''.$i.'\' AND YEAR(`date`) = \''.$line['year'].'\';';
  
$res3 mysql_query($sql,$connection);
  
$line3 mysql_fetch_array($res3);
  if (
$line3['count'] != 0)
  {
   echo 
'<span style="width:55px;"><a href="#">'.$m2Str["$i"].' ('.$line3['count'].')</a></span>';
  } else {
   echo 
'<span style="width:55px;">'.$m2Str["$i"].' (0)</span>';
  };
 };
 echo 
'<br>';
}; 
__________________
The truth You hear may not be the truth You think it is

Geändert von H3ck|0 (15.08.2004 um 04:53 Uhr).
H3ck|0 ist offline   Mit Zitat antworten
Alt 15.08.2004, 05:02   #7
TP-Urgestein
 
Benutzerbild von webcreate
 
Registriert seit: Nov 2003
Ort: NRW
webcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichts
H3ck|0 nun versteh ich Dein Anliegen nicht so ganz.
Klar funktioniert Dein Script auch und ist bestimmt kürzer.
Einziger Unterschied ist, ich benötige 1 DB Anfrage Du wiederum 3.
Was nun besser, schneller, effektiver ist, mag wohl jeder selber entscheiden.
Wie immer ist es halt so, dass zig Wege nach Rom führen.
__________________
Gruß Mark
Mein Blog zum TP || XING Profil || grafiker.de Profil || How to use GOOGLE
emCalculator 1.0

webcreate IT SOLUTIONS
www.webcreate-nrw.de
webcreate ist offline   Mit Zitat antworten
Alt 15.08.2004, 05:15   #8
TP-Supporter
 
Registriert seit: Feb 2003
Ort: Bremen
H3ck|0 ist auf einem guten Weg
Das "*für bekloppt erklär* " war einzig und allein auf deinen ersten Satz in Post #5 bezogen

Zitat:
Was nun besser, schneller, effektiver ist, mag wohl jeder selber entscheiden.
Jep... wobei meiner Meinung nach die Performance bei nur wenigen Datensätzen wohl kaum ein Problem sein wird, sondern eher die Übersichtlichkeit und Wartbarkeit des Scripts...

Außerdem hab ich einfach mal wieder die Lust am Programmieren entdeckt
__________________
The truth You hear may not be the truth You think it is
H3ck|0 ist offline   Mit Zitat antworten
Alt 15.08.2004, 05:21   #9
TP-Urgestein
 
Benutzerbild von webcreate
 
Registriert seit: Nov 2003
Ort: NRW
webcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichts
Zitat:
Zitat von H3ck|0
Außerdem hab ich einfach mal wieder die Lust am Programmieren entdeckt
Dann nimmst Du meines, da ist die Chance größer sich zu verlieren.
Einfach kann ja jeder
__________________
Gruß Mark
Mein Blog zum TP || XING Profil || grafiker.de Profil || How to use GOOGLE
emCalculator 1.0

webcreate IT SOLUTIONS
www.webcreate-nrw.de
webcreate ist offline   Mit Zitat antworten
Alt 16.08.2004, 01:45