Abfrage der letzten Einträge

Hallo liebe WWW’ler,

ich komm hier nicht weiter…
Auf der Startseite sollen nur immer die letzen 3 News angezeigt werden, seh aber immer alle.
Ich habe mit „Limit“ versucht - ohne Erfolg.
Ehrlich gesagt versteh ich die Abfrage auch nicht. (Wie kommt er an den Tabellennamen???)

Sorry für den langen Codeschnipsel aber ich denke man muss den Zusammenhang sehen.

Vielen Dank!!!

micha

Auf der index.php

**************

<?php /////////////////////////////////////////////////////////
// CB-Portal - CMS (Content-Management-System) // // ------------------------------------------- // // // // Copyright (c) by Carsten Hufe aka Tocsulus // // [http://www.code-box.de](http://www.code-box.de) // // // // This program is free software. You can redistribute // // it and/or modify it under the terms of the GNU // // General Public License as published by the Free // // Software Foundation }. // // // // Dieses Programm ist freie Software. Es darf weiter- // // gegeben und verändert werden, unter den Bedingungen // // der GNU General Public License (veröffentlicht von // // der Free Software Foundation). // ///////////////////////////////////////////////////////// require("lib/class.main.php"); require("lib/class.news.php"); $main = new main("home", "home"); $main-\>finalize(news::getnews()); ?\> \*\*\*\*\*\*\*\* in der class.news.php \*\*\*\*\*\*\*\*\*\*\*\*\*\*\* <?php /////////////////////////////////////////////////////////
// CB-Portal - CMS (Content-Management-System) // // ------------------------------------------- // // // // Copyright (c) by Carsten Hufe aka Tocsulus // // [http://www.code-box.de](http://www.code-box.de) // // // // This program is free software. You can redistribute // // it and/or modify it under the terms of the GNU // // General Public License as published by the Free // // Software Foundation }. // // // // Dieses Programm ist freie Software. Es darf weiter- // // gegeben und verändert werden, unter den Bedingungen // // der GNU General Public License (veröffentlicht von // // der Free Software Foundation). // ///////////////////////////////////////////////////////// class news { function &getnews() { global $conf, $main; $result = mysql\_query("select \* from ".$main-\>pretab."news where showit = 1 order by datum desc"); if(mysql\_num\_rows($result)) // limit 0, ".$conf-\>news\_shownum ".$main-\>getrights(9, 1)." { $news = ""; $tpl = tplload("home/newsbox.tpl"); $i = 0; while(($row = mysql\_fetch\_array($result)) && $i news\_shownum) { $mehr = ""; $comment = ""; if($main-\>checkright(9, $row['id'])) { $row['more'] = trim($row['more']); if(!empty($row['more'])) $mehr = \_newsmore; if($row['comment']) $comment = \_newscomment; $news .= tplprint($tpl, array( "TITEL" =\> $row['titel'], "DATUM" =\> date($conf-\>cfg\_datestamp, $row['datum']), "ZEIT" =\> date($conf-\>cfg\_timestamp, $row['datum']), "INHALT" =\> $row['inhalt'], "AUTOR" =\> $row['autor'], "MEHR" =\> $mehr, "KOMMENTARE" =\> $comment, "ID" =\> $row['id'])); $i++; } } mysql\_free\_result($result); return $news; } } function &getdata($id) { global $main; $result = mysql\_query("select \* from ".$main-\>pretab."news where id = ".intval($id)); if(mysql\_num\_rows($result)) return mysql\_fetch\_array($result); } function getmonth($monat) { switch($monat) { case 1: $mname = \_newsjan; break; case 2: $mname = \_newsfeb; break; case 3: $mname = \_newsmar; break; case 4: $mname = \_newsapr; break; case 5: $mname = \_newsmai; break; case 6: $mname = \_newsjun; break; case 7: $mname = \_newsjul; break; case 8: $mname = \_newsaug; break; case 9: $mname = \_newssep; break; case 10: $mname = \_newsokt; break; case 11: $mname = \_newsnov; break; case 12: $mname = \_newsdez; break; default: $mname = ""; } return $mname; } function &getlist($month, $year) { global $main, $conf, $rights; $stamp = mktime(0, 0, 0, intval($month), 1, intval($year)); $result = mysql\_query("select datum, id, autor, titel from ".$main-\>pretab."news where stamp = ".$stamp.$rights." order by datum desc"); if(mysql\_num\_rows($result)) { $data = ""; $tpl = tplload("news/listpart.tpl"); while($row = mysql\_fetch\_array($result)) { $data .= tplprint($tpl, array( "DATUM" =\> date($conf-\>cfg\_datestamp, $row['datum']), "ID" =\> $row['id'], "TITEL" =\> $row['titel'], "AUTOR" =\> $row['autor'])); } } return $data; } function &genhistory() { global $main, $rights; $result = mysql\_query("select stamp from ".$main-\>pretab."news where datum \>= 0".$rights." group by stamp desc"); if(mysql\_num\_rows($result)) { $data = ""; while($row = mysql\_fetch\_array($result)) { $jahr = date("Y", $row['stamp']); $monat = date("n", $row['stamp']); if($jahr != $tmpjahr) { if(!$dummy) { $data .= tplprint(\_news1styear, array("JAHR" =\> $jahr)); $dummy = TRUE; } else $data .= tplprint(\_newsyear, array("JAHR" =\> $jahr)); } $data .= tplprint(\_newsmonth, array("JAHR" =\> $jahr, "MONAT" =\> $monat, "MONATNAME" =\> $this-\>getmonth($monat))); $tmpjahr = $jahr; } return $data; } } } ?\> \*\*\*\*\*\*\*\*\*\*\*\*

Limit ist aber richtig…
sind aber insgesamt 4 oder 5 queries drin…

vom Namen her würd ich sagen hier kommt das limit rein:
function &genhistory()
{
global $main, $rights;
$result = mysql_query(„select stamp from „.$main->pretab.„news where datum >= 0“.$rights.“ group by stamp desc“);

btw: sourcecode bitte mit pre-tag formatieren.

sind aber insgesamt 4 oder 5 queries drin…

stimmt, aber er sagt ja, dass es um die news geht.
deshalb würde ich

function &genhistory()
{
global $main, $rights;
$result = mysql_query(„select stamp from
„.$main->pretab.„news where datum >= 0“.$rights.“ group
by stamp desc“);

nicht denken, sondern

function &getnews()
{
global $conf, $main;
$result = mysql_query("select * from ".$main->pretab.„news where showit = 1 order by datum desc“);

und das halt umändern zu

function &getnews()
{
global $conf, $main;
$result = mysql_query("select * from ".$main->pretab.„news where showit = 1 order by datum LIMIT 3 desc“);

Hallo Timo,

vielen Dank erst mal für den Tip! Leider klappt nicht ganz…
bekomme eine Fehlermeldung:

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/ws10566/public_html/lib/class.news.php on line 26

Das ist genau die Zeile unter der geänderten mit Inhalt:

if(mysql_num_rows($result)) // limit 0, ".$conf->news_shownum „.$main->getrights(9, 1).“

function &getnews()
{
global $conf, $main;
$result = mysql_query("select * from ".$main->pretab.„news
where showit = 1 order by datum LIMIT 3 desc“);

Noch ne Idee??

Danke!

Grüße

micha

dann kopier mal die beiden Zeilen rein…
Fehler in Zeile unter geänderter Zeile hört sich immer nach vergessenem ; an.
Allerdings würde ich sagen, dass das Limit ans ende gehört und nicht vor das DESC…

while(($row = mysql_fetch_array($result)) && $i news_shownum)

Du könntest natürlich auch in der Konfiguration von dem Script news_shownum auf 3 setzen, und die die Bastelei mit dem Limit sparen…

dann kopier mal die beiden Zeilen rein…
Fehler in Zeile unter geänderter Zeile hört sich immer nach
vergessenem ; an.
Allerdings würde ich sagen, dass das Limit ans ende gehört und
nicht vor das DESC…

hm… stimmt, hab ich auch so in meinem nesscriptchen.
allerdings versteh ich den sinn nich von mysql_num_rows().
wenn ich LIMIT 3 setze geh ich doch mal davon aus, dass mysql_num_rows() auch 3 zurückliefert (angenommen in der datenbank stehen mehr als 3 einträge!)

dann kopier mal die beiden Zeilen rein…
Fehler in Zeile unter geänderter Zeile hört sich immer nach
vergessenem ; an.
Allerdings würde ich sagen, dass das Limit ans ende gehört und
nicht vor das DESC…

hm… stimmt, hab ich auch so in meinem nesscriptchen.
allerdings versteh ich den sinn nich von mysql_num_rows().

der block soll nur ausgefuehrt werden, wenn news da sind.