CrazyLexx: Gesucht: Syntax für "nächsten x Einträge" anzeigen

Hallo zusammen,

möchte auf der Startseite immer die letzten x Meldungen aus einer Kategorie anzeigen lassen und verwende dafür ungefähr folgenden Code zur Abfrage der Datenbank:

  
<?php  
$featured_news = mysql_query("SELECT * from ccms_news where featured='1' order by id desc limit 15");  
  $c = 1;  
  while ($row = mysql_fetch_assoc($featured_news)) {  
  
// <span class=\"contentlight\"> - "; echo days_ago($row[timestamp]); echo "</SPAN>  
  
$title_start = preg_replace('/[^a-zA-Z0-9 *]/', '', $row[title]);  
$title_seo = str_replace(' ', '-', $title_start);  
  
if($odd = $c%2 ) {  
$style = "images/list_bg.gif";  
} else {  
$style = "images/list_bg2.gif";  
}  
  
echo "  <tr>  
   <td width=\"600\" height=\"67\" valign=\"middle\" style=\"background-image:url($style);background-repeat:repeat-y;background-position:top left;padding-top: 1px;\">  
  
    <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\" width=\"600\" align=\"center\">  
    <tr>  
     <td width=\"99%\" valign=\"top\" style=\"padding: 5px;\">\n";  
  
     if ($row[platform]) {  
echo "      <img src=\"images/consoles/$row[platform].gif\" align=\"right\">";  
     }  
  
echo "     <a href=\"story-$row[id]-$title_seo.html\" class=\"latest_news\">$row[title]</a><br />  
     <SPAN class=\"latest_news\">$row[prev_news]</SPAN></td>  
</tr>  
</table>  
  
</td>  
  </tr>\n\n";  
  
  $c++;  
  }  
?>  

Möchte nun gerne unter diese Liste einen Link einbinden, mit der ich dann an gleicher Stelle (also wieder auf der Startseite) die entsprechend "nächst älteren" Meldungen angezeigt bekomme. Wie würde die Syntax dann aussehen?

Danke,
Tom

  1. Hallo Tom,

    SELECT * from ccms_news where featured='1' order by id desc limit 15

    SELECT * ist böse[tm]. Verwende bitte

    SELECT  
        spalte1,  
        spalte2,  
        ...,  
        spalten  
    FROM ...
    

    Möchte nun gerne unter diese Liste einen Link einbinden, mit der ich dann an gleicher Stelle (also wieder auf der Startseite) die entsprechend "nächst älteren" Meldungen angezeigt bekomme. Wie würde die Syntax dann aussehen?

    Baue Dir mittels PHP die geeignete LIMIT-Klausel zusammen.

    Freundliche Grüße

    Vinzenz

  2. Hi,

    Möchte nun gerne unter diese Liste einen Link einbinden, mit der ich dann an gleicher Stelle (also wieder auf der Startseite) die entsprechend "nächst älteren" Meldungen angezeigt bekomme. Wie würde die Syntax dann aussehen?

    Du kannst Limit auch mit 2 Parametern anwenden. Den offset musst du dann immer per Link übergeben.

    Zitat aus dem Manual:

      
    SELECT * FROM tbl LIMIT 5,10;  # Retrieve rows 6-15  
    
    

    mfG,
    steckl

    1. Du kannst Limit auch mit 2 Parametern anwenden. Den offset musst du dann immer per Link übergeben.

      Zitat aus dem Manual:

      SELECT * FROM tbl LIMIT 5,10;  # Retrieve rows 6-15

      Da ich aber von mysql eigentlich überhaupt keine Ahnung habe, muss ich mal wegen der Syntax fragen:  
        
      Bedeutete "LIMIT 5,10;" nicht, dass die Datenbankeinträge von 5 bis 10 ausgegeben werden? Oder definiert das sowas wie Intervalle?  
        
      Wie bekomme ich dann den Link zu den z.B. nächsten 5 Einträgen automatisch angepasst?  
        
      Danke,  
      TOM
      
      1. Hallo,

        Wie bekomme ich dann den Link zu den z.B. nächsten 5 Einträgen automatisch angepasst?

        Mit einfacher Arithmetik und URL-Argumenten/Parametern:

        • du definierst eine Variable $offSet
        • initialisierst diese entweder auf 0 oder auf den Wert, der per URL übergeben worden ist
        • für den neuen Link addierst du einfach das jeweilige $offset und das Interval

        1. Seite: 0, 10
          -> $offset ist nicht übergeben worden, also nimmt es den Wert 0 an
          -> <a href="nächsteSeite.php?offset=0+10">...</a>

        2. Seite 10, 10
          -> $offset ist übergeben worden und nimmt den Wert 10 an
          -> <a href="nächsteSeite.php?offset=10+10">...</a>

        ... usw

        Das SQL dazu kannst du dir ja geeignet in PHP zusammenbauen.

        $sql = "SELECT blabla FROM blubb LIMIT ".$offset.",10";

        Vorsicht vor SqlInjection!!! (Mein beispiel wäre anfällig)

        Eigentlich mit etwas Nachdenken nicht so schwer, oder?

        Evt. solltest du auch eine konkrete Sortierung mittels ORDER BY in Betracht ziehen. Und von SELECT * solltest du Abstand nehmen, benenne die auszugebenden Spalten ausdrücklich. Tipp: Damit kann man sogar die Ausgabereihenfolge von Spalten ändern und bestimmte Spalten von der Ausgabe ganz einfach durch Nichtnennung ausschliessen. ;)

        Ciao, Frakn

      2. Hi,

        Da ich aber von mysql eigentlich überhaupt keine Ahnung habe, muss ich mal wegen der Syntax fragen:

        Streiche "frage", setze "nachlesen".

        Bedeutete "LIMIT 5,10;" nicht, dass die Datenbankeinträge von 5 bis 10 ausgegeben werden? Oder definiert das sowas wie Intervalle?

        Du hast den Link auf die Manualseite bzgl. SELECT bereits bekommen - also lese es bitte nach.

        Wie bekomme ich dann den Link zu den z.B. nächsten 5 Einträgen automatisch angepasst?

        In dem du eine simple Addition durchfuehrst.

        MfG ChrisB