PHP: 2 Bilder von einer Datenbank Random anezeigen

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

      PHP: 2 Bilder von einer Datenbank Random anezeigen

      hey hab folgendes problem.. ich kriegs nicht hin das 2 bilder (von vielen) aus einer datenbank gezogen werden und diese dann random (nicht doppelt und nur bilder) angezeigt werden auf einer bestimmten website...

      was mach ich falsch :S

      PHP-Quellcode

      1. ​<div id="main">
      2. <div id="img_body">
      3. <?php
      4. $sql = mysql_query("SELECT * FROM img_uploads");
      5. $num_rows = mysql_num_rows($sql);
      6. $r1 = rand(0, $num_rows);
      7. do{
      8. $r2 = rand(0, $num_rows);
      9. }
      10. while($r2 == $r1);
      11. $sql = mysql_query("SELECT src FROM img_uploads WHERE id = ".$r1);
      12. $row = mysql_fetch_row($sql);
      13. echo "<a href='index.php?vote=0'><div class='img_selection'><img src='img_upload/".$row[0]."'/></div></a>";
      14. $sql = mysql_query("SELECT src FROM img_uploads WHERE id = ".$r2);
      15. $row = mysql_fetch_row($sql);
      16. echo "<a href='index.php?vote=1'><div class='img_selection'><img src='img_upload/".$row[0]."'/></div></a>";
      17. $out = "$row";
      18. $_SESSION['imgs'][0] = 1;
      19. $_SESSION['imgs'][1] = 2;
      20. ?>
      21. </div>
      Alles anzeigen


      Thx an sTaTus_xXx für sigi und avatar :*
      Du könntest

      SQL-Abfrage

      1. SELECT src
      2. FROM img_uploads
      3. ORDER BY RAND()
      4. LIMIT 2

      verwenden.
      (In wie Fern das bei größeren Datenmengen noch performant ist, weiß ich nicht)

      Dein aktueller Code ist in sofern problematisch, dass du keine Einträge mehr löschen darfst. Dann hast du z.B. die IDs 1,3,4,5 und num_rows gibt logischerweise 4 aus. Damit wäre 4 auch die höchste angesprochene ID. Alles das drüber ist wird ignoriert. Und falls Zufällig die 2 ausgewählt wird, gibts kein Ergebniss.

      Ansonsten seh ich in dem Code erstmal keinen Fehler ... gibt es einen?

      Gruß
      florian0

      PS: Die MySQL Extension ist deprecated (veraltet). Besser mysqli oder pdo benutzen.
      Für die Anzahl der Bilder in der DB zu bestimmen nimmst du auch besser

      Quellcode

      1. ​SELECT count(*) FROM ...

      Ansonsten werden ja erst mal alle Daten selektiert, was unnötig lange dauert. Um die höchste ID zu ermitteln nimmst du am besten

      SQL-Abfrage

      1. SELECT max(id) FROM ...

      Aber wie florian0 schon gesagt hat, geht das nur wenn die ID's durchgängig belegt sind.
      ORDER BY RAND() kannte ich gar nicht, hört sich aber gut an ;)
      Sollte es damit zu Problemen kommen, kannst du dir auch erst mit count(*) die Anzahl der Einträge bestimmen lassen, dann ein Offset zwischen 0 und count(*) - 1 nehmen und folgendes Konstrukt benutzen:

      SQL-Abfrage

      1. SELECT ... FROM ... LIMIT offset, 2

      Danke an xNiGhTMaR3x für die Signatur und Avatar =)