Seite 2 von 2

Verfasst: 08.08.2005 17:39
von kellanved
Das lernt man recht schnell. Ich würde tasächlich das Ganze noch auf die "SELECT pic_id, pic_title, pic_desc FROM $album_table ORDER BY RAND() LIMIT 4" Methode umstellen, da so mit einer einzigen SQL-Abfrage alles erledigt wird.


Das ganze Maximum suchen und Zufallsgenerator anschmeissen kannst Du Dir dann schenken.

Verfasst: 08.08.2005 17:50
von Martin Truckenbrodt
Hallo,
das nenne ich gesund schrumpfen!

Code: Alles auswählen

<table>
<?php 
   $sql="SELECT pic_id, pic_title, pic_desc FROM $album_table ORDER BY RAND() LIMIT 1"; 
  $result = mysql_query($sql) or die; 
  while ($row = mysql_fetch_array($result)) 
  
  
    print "<TR><TD align='center'>" . $row['pic_title'] . "<BR></TD></TR><TR><TD align='center'><a href='". $phpbb_root_path ."album_page.php?pic_id=" . $row['pic_id'] . "'><img alt='" . $row['pic_desc'] . "' src='". $phpbb_root_path ."album_thumbnail.php?pic_id=" . $row['pic_id'] . "'></a></TD></TR>"; 

?> 
</table>
Flutscht!
So ist auch das Problem erschlagen, wenn der rand einen Wert ermittelt für den es keinen Daten Satz ermittelt.

Ich habe nur immer noch nicht das Prinzip vonm PHP ganz verstanden. Wie komt es z.B. das bei LIMIT=4 gleich vier zeilen dargestellt werden/wurden?

Mein/Unser erstes PHP Skript ist fertig!

Vielen Dank Martin!

Verfasst: 08.08.2005 18:16
von kellanved
Ich dachte es sollten vier Bilder dargestellt werden.

Limit setzt die Maximalzahl der zurückgelieferten Ergebnisse, die dann in dem "while" durchlaufen werden; jeder Aufruf von mysql_fetch_array liefert ein Ergebnis, bis keines mehr vorhanden ist.

Man könnte diese Ergebnisse auch z.B. zwischenspeichern.

Verfasst: 08.08.2005 18:25
von Martin Truckenbrodt
Hallo,
ich habe jetzt auf drei beschränkt, da der Titel der Bilder teilweise recht breit ist.
In der Kürze liegt die Würze:

Code: Alles auswählen

<table>
<?php 
   $sql="SELECT pic_id, pic_title, pic_desc FROM $album_table ORDER BY RAND() LIMIT 1"; 
  $result = mysql_query($sql) or die; 
  $row = mysql_fetch_array($result); 
    print "<TR><TD class='klein' align='center'>" . $row['pic_title'] . "<BR></TD></TR><TR><td align='center'><a href='". $phpbb_root_path ."album_page.php?pic_id=" . $row['pic_id'] . "'><img alt='" . $row['pic_desc'] . "' src='". $phpbb_root_path ."album_thumbnail.php?pic_id=" . $row['pic_id'] . "'></a></td></TR>"; 
?> 
</table>
Ich rufe das Skript für jedes Build einzeln auf. Sollte doch nicht deutlich mehr Last verursachen, oder?

Vielen Dank nochmal! http://smartor.is-root.com/viewtopic.php?p=64215#64215

Gruß Martin

Verfasst: 08.08.2005 19:43
von kellanved
als Faustregel sollte man die Datenbank so selten aufrufen, wie irgend möglich. (stimmt nicht immer, aber ist erstmal ein guter Anfang).

Ich würde daher nur eine DB Anfrage stellen und mir immer mit mysql_fetch_array($result) jeweils die Daten für ein Bild geben lassen.

Schon alleine um zu verhindern, daß ein Bild evtl. mehrfach ausgelost wird.

Verfasst: 08.08.2005 20:03
von Martin Truckenbrodt
Hallo,
ich will die Bilder horizontal nebeneinander stellen. Das dürfte trotzdem mit einer Abfrage schwierig werden.

Gruß Martin