monika: Nur neueste datensätze anzeigen

Hallo,
Ich habe folgende Tabelle:

CREATE TABLE news (
  id int(11) NOT NULL auto_increment,
  titel varchar(100) default NULL,
  nachricht blob,
  datum timestamp(14) NOT NULL,
  abteilung varchar(20) default NULL,
  PRIMARY KEY  (id)
) TYPE=MyISAM;

Es kann hier klarerweise mehrere Einträge einer Abteilung geben.
Ich möchte nun, das aber immer nur der letzte Eintrag einer Abteilung
angezeigt wird. Und zwar mit dem Datum. Bastle schon einige Zeit an dem Problem herum, bin aber bis jetzt nicht draufgekommen wie das funktionieren könnte.
Danke für Eure Hilfe

Moni

  1. Hallo,
    Ich habe folgende Tabelle:

    CREATE TABLE news (
      id int(11) NOT NULL auto_increment,
      titel varchar(100) default NULL,
      nachricht blob,
      datum timestamp(14) NOT NULL,
      abteilung varchar(20) default NULL,
      PRIMARY KEY  (id)
    ) TYPE=MyISAM;

    select * from news order by datum desc

    dann einen zähler in der fetch row schleife hochzählen lassen und bei der gewünschten menge abbrechen..
    Gruss Felix

    1. Hallo Felix,
      Danke vorerst für Deine prompte Antwort.
      Das mit dem Zähler ist mir irgendwie klar. Nur wo soll er aufhören zu zählen?
      Nochmal ein Beispiel:
      Die Abteilung XY hat z.B. 3 Einträge.

      Einen mit id 3 vom 01.09.2002
      Einen mit id 10 vom 02.09.2002
      Einen mit id 16 vom 03.09.2002

      Es soll nun der letzte Datensatz dieser Abteilung XY ausgelesen werden. In dem Fall ist es der mit id 16 vom 03.09.2002.

      lg
      Moni

      1. $zaehler=0;
        [Datenbankconnectkrempel ]
        [Datenbankabfragekrempel ]
        [Datenbankfetchrowkrempel]
        while(fetch row usw)
        {
          if($zaehler<1){ [Ausgabe der Nachricht.. print echo oder wie auch immer]}
         $zaehler++;
        }

        SO gehts, allerdings holst du damit den gesammten Inhalt der Tabelle, auch wenn du ihn nicht ausgibt. Elegenter wäre es wohl das ganze schon in der Abfrage einzugrenzen.
        Gruss

        Felix

        1. bei mySQL wäre das z.B. mit Limit...
          das ist auf jeden Fall besser...

      2. Einen mit id 3 vom 01.09.2002
        Einen mit id 10 vom 02.09.2002
        Einen mit id 16 vom 03.09.2002

        Hi Monika,

        egal welche Datenbank es ist, es handelt sich um ein logisches Problem:

        wenn die Eingaben der "Abteilungen" iterativ erfolgen, also sich kontinuierlich forsetzen, dann erhältst du den aktuellsten Datensatz einer Abteilung bzw. dessen Identifier dadurch, dass du eine WHERE Clause für die Abteilung machst und mit einer Aggregat Funktion -> MAX(ID) die höchste ID abgreifst.

        SELECT MAX(ID) as letzterEintrag from tabelleX WHERE abteilung = 'xyz'

        Man könnte sich auch eine Variante mit Gruppierung vorstellen, wenn es nützlich wäre gleich über alle Abteilungen die letzten Einträge zu erfahren

        Select Max(ID) as letzerEintrag from tabelleX GROUP BY abteilung

        Je nach dem was du für eine DB hast kannst du jetzt dieses SELECT als Subselect verwenden. MySQL unterstützt dies glaube ich nicht...
        Oracle, MS SQL, Access bieten diese Möglichkeiten für "Unterabfragen"
        auf jeden Fall.

        Ich hoffe es hilft dir etwas weiter,
        tschau, Frank

        1. Hallo Frank,
          Dein Vorschlag kommt glaube ich ziehmlich dort hin was ich erreichen möchte. Ich habe nachfolgenden code in meinem script. Die Abfrage funktioniert auch irgendwie, da es in der tabelle news insgesamt 4 Einträge gibt, von einer Abteilung allerdings schon zwei. Angezeigt werden aber drei, was ja auch korrekt ist. Leider werden mir aber die Einträge nicht angezeigt. Das einzige was zu sehen ist, ist:

          Letzte News vom
          Letzte News vom
          Letzte News vom

          alles andere wird nicht angezeigt.

          $result = mysql_query("Select Max(id) from news GROUP BY abteilung",$db);
          while($row=mysql_fetch_array($result))
          {
          $id=$row["id"];
          $abteilung=$row["abteilung"];
          $datum=$row["datum"];
          echo "".$abteilung."     ";
          echo "Letzte News vom ";
          echo ($datum) ? datum($datum) : "";
          echo "<br>";

          Irgend eine Kleinigkeit stimmt noch nicht.
          Aber was ???

          Moni

          1. Hallo Monika,

            $result = mysql_query("Select Max(id) from news GROUP BY abteilung",$db);
            while($row=mysql_fetch_array($result))
            {
            $id=$row["id"];
            $abteilung=$row["abteilung"];

            Du hast die Datenbankfelder "id" und "abteilung" nicht im select, um die zu bekommen, mach etwas a la "select max(id) as maxid, abteilung..."

            Viele Grüße
            Stephan

            1. Hallo Stephan,
              !!!!ES FUNKTIONIERT!!!!

              Danke an alle

              lg
              Moni

  2. Hallo Zusammen,
    Hier der funktionierende Quellcode:

    $result = mysql_query("Select Max(id) as maxid,abteilung,datum from news GROUP BY abteilung",$db);
    while($row=mysql_fetch_array($result))
    {
    $id=$row["id"];
    $abteilung=$row["abteilung"];
    $datum=$row["datum"];
    echo "".$abteilung."     ";
    echo "Letzte News vom ";
    echo ($datum) ? datum($datum) : "";
    echo "<br>";

    lg
    Moni