Bei der Auflistung Informationen aus einer Datenbank PHP und MySQL verwenden, wie würden Sie die erste Zeile auf den Rest sehen anders machen?

StackOverflow https://stackoverflow.com/questions/579664

Frage

Im Prinzip habe ich Artikel in meiner Datenbank und ich mag die Art und Weise die erste Datensatz angezeigt ändern. Ich mag der neueste (Veröffentlicht) Artikel der Fokus und die älteren Artikel nur zur Liste sein, (siehe F1.com ). Ich muss wissen, wie die erste meiner Werte im Array zu bekommen und bekommen es anders angezeigt werden, aber ich bin nicht sicher, wie dies zu tun, ich kann es tun, so werden alle Zeilen die gleiche Anzeige nur nicht, wie die erste Zeile zu ändern. Ich muss auch wissen, wie der Rest der Zeilen zu sagen, das gleiche anzuzeigen danach im, Sie eine if-Anweisung gibt und vor, dass irgendeine Art von Zählung für die Zeilen verwenden zu erraten.


Current Code:

    $result = mysql_query("SELECT * FROM dbArticle WHERE userID='".$_SESSION["**"]."' ORDER BY timestamp DESC");

while($row = mysql_fetch_array($result))
  {
  echo "<h2 class=\"heading1\">". $row['title'] ."</h2>";
  echo "By:  ".$row['username']."  Type: ".$row['type']."  Posted: ".$row['timestamp']." 
  $body = $row['body'];
  echo "<br/><p>";
  echo substr("$body",0,260);
  echo "...<span class=\"tool\"><a class=\"blue\" href=\"index.php?pageContent=readArticle&id=".$row['id']."\">Read More</a></span></p><hr/>";
  }
mysql_close($con);

Ok Ich habe Luke Dennis Code genommen und versuchte, es zu testen, aber ich erhalte diesen Fehler: Achtung: Invalid argument für foreach geliefert () Das ist die Linie des foreach statment. Etwas, das gerade in den Sinn kommen, ist, dass ich nur 5 wollen oder so der älteren Artikel angezeigt werden soll. Das ist, was ich habe, das ist der Fehler zu erstellen:

<? $con = mysql_connect("localhost","****","***");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("******", $con);

$result = mysql_query("SELECT * FROM dbArticle ORDER BY timestamp DESC");
$first = true;    
foreach($result as $row){
    if($first)
    {
        echo"".$row['title']."";
        echo"this is the headline";

        $first = false;
    }
    else
    {
        echo"".$row['title']."";

    }
}

?>

Muss ich mysql_fetch_array hinzufügen irgendwo das Array bis setzen?

War es hilfreich?

Lösung

Ich würde die Ergebnisse nur durchlaufen und eine CSS-Klasse auf den ersten Eintrag gelten:

$first = true;    
while ($row = mysql_fetch_assoc($result)) {
  $cssClass = '';
  if ($first) {
    $cssClass = 'highlight';
  }
  echo '<p class="' . $cssClass . '">' . $row['text'] . '</p>';
  $first = false;
}

Andere Tipps

Es ist ein bisschen grob, aber ich oft hart Code eine Variable, die den ersten Durchlauf durch eine Schleife zu bezeichnen. So etwas wie:

$first = true;
foreach($list_of_items as $item)
{
    if($first)
    {
        // Do some stuff

        $first = false;
    }
    else
    {
        // Do some other stuff
    }
}

Eine einfache if-Anweisung, wenn sie durch Ihre Ergebnisse Looping wird in der Regel den Trick. Sie können einen boolean verwenden, um anzuzeigen, wenn Sie die erste Zeile der Ergebnisse oder jetzt ausgegeben haben. Wenn Sie nicht, dann haben sie einen bestimmten Stil geben und dann den boolean auf true. Dann werden alle nachfolgenden Zeilen einen anderen Stil.

Alle oben genannten korrekt sind. Luke Dennis' Beitrag ist natürlich prall-out ein bisschen mehr.

Wie Brian Fisher sagte, einige CSS-Styling auf den ersten Link hinzufügen, wenn Sie es per Post Lukes begegnen.

Ich habe einen Blick auf die Artikelliste auf der F1-Website. Ziemlich gut gehend konstruiert - „Man würde erwarten, dass“ : -)

Wie auch immer, werden die Artikel Einträge in einer zweireihigen Tabelle (Zusammenfassung = „Neuesten Nachrichten“) enthalten ist in absteigender Reihenfolge (neueste zuerst).

Legen Sie einfach eine Klasse in der zweiten Spalte (). Dann fügen Sie die Klassennamen und entsprechenden Styling Werte in der CSS-Datei - wahrscheinlich die‘modules.css. Es gibt bereits ein ganze Reihe von Klassenwerten im Zusammenhang mit Artikeln in dieser Datei, so können Sie in der Lage sein, nur einen vorhandenen Wert zu verwenden.

Das sollte darüber sein - anders als es tatsächlich tun

!

Durch die Art und Weise, durch die Qualität des zugrunde liegenden HTML zu urteilen, ich gehe davon aus, es gibt bereits eine „Artikelliste Emitter.“ Finden Sie einfach, dass Sender und legen Sie die entsprechende Bedingung für den ersten Datensatz zu testen.

Darrell

Ich bemerkte nur Ihren Code zusätzlich. Ich gehe davon aus, dass Sie die F1-Website als Beispiel wurden zeigen. Wie auch immer, ich glaube, Sie auf Ihrem Weg.

Ich nehme an, Sie einen Code haben, die durch Ihre resultset Loops und druckt sie in die Seite? Könnten Sie diesen Code in Fügen und dass Sie sich von uns geben können, einen Ausgangspunkt zu helfen.

Ich weiß nicht, PHP, also werde ich es in Perl Pseudo-Code. Ich würde es so nicht tun:

my $row_num = 0;
for my $row ($query->next) {
    $row_num++;

    if( $row_num == 1 ) {
        ...format the first row...
    }
    else {
        ...format everything else...
    }
}

Die if-Anweisung innerhalb der Schleife unnötig unübersichtlich die Schleifenlogik. Es ist kein Performance-Problem, es ist ein Code Lesbarkeit und Wartbarkeit Problem. Dergleichen bettelt nur für einen Fehler. Nutzen Sie die Tatsache, dass es das erste, was in der Anordnung ist. Es sind zwei verschiedene Dinge, tun sie in zwei verschiedenen Teile des Codes.

my $first = $query->next;
...format $first...

for my $row ($query->next) {
    ...format the row...
}

Natürlich müssen Sie die erste Zeile abheben von Tags.

Ich würde verwenden array_shift() :

$result = mysql_fetch_assoc($resultFromSql); // <- edit
$first = array_shift($result);
echo '<h1>'.$first['title'].'</h1>';

foreach ($result as $row) {
  echo '<h2>'.$row['title'].'</h2>';
}

Der beste Weg, dies zu tun ist, um eine Aussage vor der while-Schleife holen zu setzen.

Putting einen Test innerhalb der While-Schleife, die nur wahr für eine Iteration ist, kann für ein Ergebnis von Millionen von Zeilen eine Zeitverschwendung sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top