Ankündigung

Einklappen
Keine Ankündigung bisher.

Alle Einträge eines Bestimmten Jahres Anzeigen....

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Alle Einträge eines Bestimmten Jahres Anzeigen....

    Hallo,

    ich kenne mich nicht besonders gut aus aber ich schildere mal mein Problem.

    Ich habe eine PHP gesteuerte News Seite welche die News immer aus einer Datenbank ausliest. Da mittlerweile News von mehr als 2 Jahren
    darin enthalten sind würde ich diese gerne pro Jahr aufteilen...

    So würde ich mich freuen wenn mir jemand einen Befehl nennen könnte
    mit dem ich mir alle Einträge zb. aus 2003 anzeigen lassen könnte.

    Am besten wäre es wenn es über eine Variable in der URL funktionieren würde. zb. news.php?year=2003

    Momentan sieht mein script so aus.:

    Code:
    $conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ("Konnte keine MySql-Verbindung aufbauen");
            mysql_select_db($dbname, $conn) or die ("Konnte die MySql-Datenbank nicht auswählen");
    
            print"<TABLE WIDTH=\"100%\" ALIGN=center border=\"$border\">\n";
    
    		$entries = mysql_num_rows(mysql_query("SELECT id FROM $dbtable"));
         		if($entries=='0')
        		{
          		  	echo "<tr><TD>Leider haben wir derzeit keinerlei News vorliegen.</TD></tr>\n";
          		}
    
    		$res=mysql_query("SELECT * FROM $dbtable ORDER BY id DESC LIMIT 0,1000") or die();
    		
    		while($con=mysql_fetch_array($res,MYSQL_ASSOC))
           		{
           	     		$jahr = substr($con[time],0,4);
              			$monat = substr($con[time],4,2);
          	        	$tag = substr($con[time],6,2);
    
    			$datum = "$tag.$monat.$jahr";			
    
    			print"<tr><TD BORDER=\"1\" BGCOLOR=\"#CCCCCC\">$datum: $con[subject]</A></TD></tr>\n";
    			print"<tr><TD BORDER=\"1\" BGCOLOR=\"#EEEEEE\">$con[body]</TD></tr>\n";
    			print"<tr><TD></TD></tr>\n";
    		}
    		print"</TABLE>\n";
    Ich würde mich freuen wenn mir jeman helfen könnte.

    gruß Jahn

  • #2
    wie ist das datum abgespeichert? welcher MySQL-datentyp?

    schau mal hier rein:
    http://dev.mysql.com/doc/mysql/de/Da...ime_types.html

    und in dem zuge auch mal hier:
    http://dev.mysql.com/doc/mysql/de/Da...functions.html
    [b][url=http://www.benjamin-klaile.de]privater Blog[/url][/b]

    Kommentar


    • #3
      Zuerst die Gegenfrage: welches Format hat das Datenbankfeld "time"? Es sieht stark nach timestamp aus (im Moment z.B. 20041228130300), obwohl ich DATE bevorzuge...
      Nichtsdestotrotz: mach doch den Stringvergleich:

      Alle Zahlen zwischen 20030101000000 und 20031231235959 gehören zum Jahr 2003, also musst du nur die SQL-Anweisung dahingehend anpassen:
      ... WHERE time >= '20030101000000' AND time <= '20031231235959'

      Wie man leicht erkennen kann, ändern sich die anderen Zahlen (Monate, Tage, Stunden, Minuten, Sekunden) nicht, wenn dich ein anderes Jahr interessiert, daher kannst du $jahr auch per URL übergeben und dir die Strings basteln:

      PHP-Code:
      $ersterTag $jahr."0101000000";
      $letzterTag $jahr."1231235959"
      Dadurch wird die SQL-Anweisung auch besser lesbar:
      ... WHERE time >= '$ersterTag' AND time <= '$letzterTag'

      Alternativ geht auch:
      ... WHERE time LIKE '$jahr%'

      (alles nach $jahr wird ignoriert)

      Alles klaro?

      Frohen Jahreswechsel, Zedda

      Kommentar


      • #4
        Hallo,

        ich habe MySQL 4.0.20 bei puretec gehostet.
        Das Datum ist in folgendem Format gespeichert:
        20041001125448, timestamp(14)

        Ich hoffe das hilft weiter.

        gruß Jahn

        Kommentar


        • #5
          mach ich was falsch?

          hi,

          ich habe es nun so eingefügt aber es klappt nicht.
          Code:
          $ersterTag = $jahr."20030101000000"; 
          		$letzterTag = $jahr."20031231235959"; 
          
          		$res=mysql_query("SELECT * FROM $dbtable ORDER BY id DESC LIMIT 0,1000 WHERE time >= '$ersterTag' AND time <= '$letzterTag'") or die();
          gruß Jahn

          Kommentar


          • #6
            Schon versucht, den ORDER-Befehl an den Schluss zu stellen?

            Kommentar


            • #7
              Vielen Dank

              super vielen Dank.

              nun habe ich es geschafft werde nun noch etwas feilen müssen doch das große problem ist erstmal behoben.

              gruß jahn

              Kommentar

              Lädt...
              X