Zufallsgenerator mit Begrenzung

Azubis

Grünschnabel
Hallo!
Ich habe ein kleines Problem mir einer Datenbankabfrage.
Ich brauch einen Zufallsgenerator, den ich mit mehreren Werten füttern kann.
Das heißt, der Zufallsgenerator soll aus einer vorgegeben Liste an IDs auswählen.

Kleines Beispiel:

Tabelle:

Id:
------
1
2
3
4
5
...


So. Jetzt soll der Zufallsgenerator zufällig zwischen 2 und 5 auswählen.
Also entweder 2 oder 5.


Ich hab bisjetzt das:

PHP:
$test_res = mysql_query("SELECT * FROM aufgaben_abfolge WHERE loesungsid = $_POST[loesung_radio]"); 
$count = mysql_num_rows($test_res); 
$test2 = mysql_fetch_assoc(mysql_query("SELECT * FROM aufgaben_abfolge WHERE loesungsid = $_POST[loesung_radio]")); 
while($test = mysql_fetch_assoc($test_res)) { 
    echo $test[naechsteaufgabeid]." naechste id<br />"; 
} 
echo $count." anzahl<br />"; 
echo $test2[naechsteaufgabeid][rand(0,$count - 1)]." aus array";

Wenn in der Whileschleife 16, 17 und 18 steht, bekomm ich beim Zufall unten entweder keinen Wert 1 oder 6.
Das macht allerdings überhaupt keinen Sinn, weil diese Zahlen so nicht in der Tabelle stehen.

Danke


mfg
Azubis
 
Warum schiebst du die Arbeit nicht auf MySQL?

SQL:
SELECT `field` FROM `table` ORDER BY RAND() LIMIT 1

Und schon hast du einen generischen Eintrag aus der Tabelle.
 
Dass löst das Problem glaube ich aber nicht, da dann irgend ein Zufall generiert wird. Oder täusch ich mich.

Wenn ich z.B. 10 Id's hab, will ich einen Zufall aus 3,7 und 8.
Bei dir würde er ja einen Zufall aus 1-10 machen.

mfg
Azubis
 
Mein Fehler, aber das geht auch.

SQL:
SELECT `field` 
FROM `table`
WHERE `id` IN (3, 7, 8)
ORDER BY RAND()
LIMIT 1
 
Wenn du mir jetzt noch sagen kannst, wie ich den Inhalt einer While Schleife in die Klammer mit 3, 7, 8 reinbekomme, ist mein Problem gelöst :D

mfg
Azubis
 
Die Zahlen kommen aus einer Datenbank.
Per Formular übertrage ich die LösungsID. Mithilfe dieser finde ich aus der Datenbank die passenden NächsteaufgabeID raus. (Wenn es mehrmals die selbe LösungsID gibt, kommt der Zufallsgenerator zum einsatz, weil eine nächste AUfgabe ausgewählt werden muss.

Rein theoretisch müsste es so aussehen. Aber das ist ja leider nicht so einfach möglich :P

PHP:
$test_res = mysql_query("SELECT * FROM aufgaben_abfolge WHERE loesungsid = $_POST[loesung_radio]");
$lala = mysql_query("SELECT * FROM aufgaben_abfolge WHERE naechsteaufgabe IN (while($test = mysql_fetch_assoc($test_res)) {echo $test[naechsteaufgabeid]." ,";}) ORDER BY RAND() LIMIT 1");
 
Doch, das geht sogar ;)

SQL:
SELECT `field`
FROM `aufgaben_abfolge`
WHERE `id` IN (
  SELECT `id` 
  FROM `aufgaben_abfolge`
  WHERE `loesungsid` = '1'
)
ORDER BY RAND()
LIMIT 1

Du solltest unbedingt deine Queries mit [phpf]mysql_real_escape_string[/phpf] maskieren, um SQL Injektionen vorzubeugen.
 
Ahh klar.
Unterabfragen. Hab ich total vergessen...

Aber irgendwie will das nicht wie ich...
PHP:
		$lala = mysql_query("SELECT * FROM aufgaben_abfolge WHERE naechsteaufgabeid IN (SELECT * FROM aufgaben_abfolge WHERE loesungsid = $_POST[loesung_radio]) ORDER BY RAND() LIMIT 1 ");
		echo $lala["naechsteaufgabeid"]."AHHHHHH";

Eigentlich sollte in diesem Fall ein Zufall zwischen 13 und 14 erzeugt werden.
Als Ergebnis kommt aber nichts raus :(
Er gibt einfach nichts aus.

Meine Konzentration ist aber jetzt auch am Ende.



Klar escape ich das noch. Solang etwas aber noch nicht funktioniert, mach ich sowas noch nicht, das die Fehlerquelle so klein wie möglich gehlaten werden kann.


Trotzdem danke.


mfg
Azubis
 
Und wo führst du das Query aus? ;)

PHP:
$query = mysql_query("SELECT * FROM aufgaben_abfolge WHERE naechsteaufgabeid IN (SELECT * FROM aufgaben_abfolge WHERE loesungsid = '".$_POST['loesung_radio']."') ORDER BY RAND() LIMIT 1 ");
$result = mysql_fetch_assoc($query);
echo $result["naechsteaufgabeid"]."AHHHHHH";
 
Zurück