Nur neueste datensätze anzeigen
monika
- datenbank
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
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
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
$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
bei mySQL wäre das z.B. mit Limit...
das ist auf jeden Fall besser...
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
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
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
Hallo Stephan,
!!!!ES FUNKTIONIERT!!!!
Danke an alle
lg
Moni
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