Probleme mir rand()

tittli

Erfahrenes Mitglied
Hallo
Habe angefangen, einen Voc-Trainer zu programmieren. Damit da die Wörter nicht in einer regelmässigen Reihenfolge ausgelesen werde, benutze ich die Funktion rand(). Hier der Code:

PHP:
<?php
 include("dbconnect.php");
 $rand_id = rand(1, 5);
 $abfrage = "SELECT id, deutsch, english FROM table_voc WHERE id = '$rand_id' AND done = '0'";
 $abfragen = mysql_query($abfrage);
 while ($row = mysql_fetch_array($abfragen))
 	{
         echo $row['deutsch'] . "<br>";
         $english = $row['english'];
         $id = $row['id'];
         echo $id;
         echo "<html>";
          echo "<body>";
           echo "<form action=\"abfrage_voc.php\" method=\"post\">";
           echo "<input type=\"hidden\" name=\"english\" value=\"$english\">";
           echo "<input type=\"hidden\" name=\"id\" value=\"$id\">";
           echo "<input type=\"text\" name=\"eingabe\" size=\"20\" maxlength=\"30\">";
           echo "<input type=\"submit\" name=\"submit\" value=\"Senden\">";
           echo "</form>";
          echo "</body>";
         echo "</html>";
         }
 ?>

Das 'done' in der Abfrage steht da, damit die bereits richtig eingetippten Wörter nicht ein zweites Mal abgefragt werden. Vielleicht steht mein Problem auch damit in Verbindung.
Problem: Wenn ich das Programm starte und ein paar Mal F5 drücke, um zu sehen, ob alle Einträge ausgelesen werden, wird manchmal nichts ausgelesen, und das obwohl in der DB alle Einträge 'done' auf 0 ist. Wo könnte das Problem liegen?

danke für die Hilfe!
gruss
 
Versuch mal folgendes:
PHP:
<?php
	include('dbconnect.php');
	$query = "
		SELECT
		        `id`,
		        `deutsch`,
		        `english`
		  FROM
		        `table_voc`
		  WHERE
		        `done` = '0'
		  ORDER BY
		        RAND()
		  LIMIT
		        1
	";
	if( !$res = mysql_query($query) ) {
		echo '<p><strong>MySQL Error <tt>'.mysql_errno().'</tt>:</strong> '.htmlspecialchars(mysql_error()).'<pre>'.$query.'</pre></p>';
		exit;
	}
	while( $row = mysql_fetch_array($abfragen, MYSQL_ASSOC) ) {
		echo $row['deutsch'] . "<br>";
		echo $row['id'];
		echo '<form action="abfrage_voc.php" method="post">';
		echo '<input type="hidden" name="english" value="'.$row['english'].'">';
		echo '<input type="hidden" name="id" value="'.$row['id'].'">';
		echo '<input type="text" name="eingabe" size="20" maxlength="30">';
		echo '<input type="submit" name="submit" value="Senden">';
		echo '</form>';
	}
?>
 
Zuletzt bearbeitet:
hmm...irgendwie funktioniert was, aber irgendwie immer noch nicht richtig!
Kann man bei RAND() kein Minimum / Maximum angeben? Oder was nimmt er als Min/Max?
gruss
 
Also wenn es hier noch um die MySQL-Routine RAND() geht, dann folgendes:

RAND() liefert eine Zufallszahl zwischen 0 und 1 zurück. Um also einen ganzzahligen Zufallswert in [A,B] zu erhalten, benötigt man folgende Syntax

ROUND(RAND()*(B-A)+A)

Beste Grüße
Falk
 
@vogtländer: Das ist so nicht ganz korrekt. Denn im Falle von Gumbos SQL-Query sorgt das RAND() in der ORDBER BY-Klausel dafür, dass ein (weil LIMIT 1) zufällig ausgewählter Datensatz aus allen vorhandenen (bzw. allen, auf die die Abfrage mit der einschränkenden WHERE-Bedingung zutrifft) zurückgeliefert wird.


Spescha, was funktioniert denn genau nicht? Min./Max. sind in diesem Falle sozusagen die niedrigste bzw. höchste ID (siehe oben).
 
so...habe das ganze Problem mal stehen gelassen und heute wieder aufgegriffen. Ich denke, das Problem liegt daran, dass rand() (in PHP) immer wieder die gleichen Zahlen liefert. Ist es irgendwie möglich, rand() dazu zu bringen, eine Zahl x genau einmal zu bringen?
gruss
 
Zurück