Mysql + PHP] Datensätze zufällig ausgeben

Moritz123

Erfahrenes Mitglied
Hallo!

gleich vorweg: ich habe die Suche benutzt aber keine Lösung meines Problemes gefunden.

der Sachverhalt:
ich will für meine kl Schwester einen Mathetrainer programmieren.
Dazu habe ich ein kleines PHP-Script geschrieben, dass die Aufgaben und Ergebnisse aus eine Datenbank holt und diese dann mit dem Eingebenen vergleicht und schließlich, sollte die Eingabe korrekt sein, ein entsprechendes Lob ausgibt und im Feld "done" eine 1 setzt, damit diese Aufgabe nicht mehr gestellt wird.
Datenbankstruktur:
Code:
id | katschluessel | katname | aufgabe | ergebnis | done
katschluessel = Kategorie im html-konformen Format
katname = Kategorie im "lesbaren" Format

das Problem:
zu Beginn wird eine Kategorie ausgewählt und dann soll:
1) eine Aufgabe aus der gewählten Kategorie ausgeben werden
2) diese Aufgabe aus dem Pool der in der DB eingetragenen Aufgaben zufällig ausgewählt werden

und genau bei der 2 ist das Problem: Da ich die ID durchgängig vergebe, kann ich mit rand() ja keine zufallszahl generieren, nach der ich den Datensatz auswähle.
Beispiel:
Datensätze:
1 | umrechnung | umrechnung von einheiten | 100g in kg | 0,1 | 0
2 | schriftdiv | Schriftl Dividieren | 185 : 5 | 37 | 0
3 | umrechnung | umrechnung von einheiten | 100kg in t | 0,1 | 0

gewählte Kategorie "umrechnung"

$anzahl = 3
$ausgabe = rand($anzahl)

$ausgabe ergibt dann durch zufall 2, das heißt ich erhalte den Datensatz mit der id 2.

Ich hoffe das Problem ist klar geworden...

Vielen Dank für die Hilfe!
 
Vielen Dank für die Antwort!
ich habe das jetzt so gemacht:
PHP:
	$abfrage = "SELECT * FROM mathetrainer WHERE katschluessel = '$_POST[katschluessel]' ORDER BY RAND() LIMIT 0,1";

Allerdings gibt er mir dann immer den selben Datensatz aus.
 
PHP:
$abfrage = "SELECT * FROM mathetrainer WHERE katschluessel = '$_POST[katschluessel]' && id='$ausgabe'";
 
oben hast du folgendermassen einen zufallswert ermittelt:
$anzahl = 3
$ausgabe = rand($anzahl)

wenn der zufallswert jetzt zb 2 ist gibt er den datensatz aus bei dem das feld id den wert 2 und das feld katschluessel die gewählte kategorie hat
 
achso...

hast du denn die anzahl an einträgen für die gewählte kategorie?
wenn nicht zähl die einträge der kategorie mit mysql_num_rows(), ermittel dann eine zufallszahl mit dem mysql_num_rows ergebnis als höchsten wert und schreib dann folgendes:

$abfrage = "SELECT * FROM mathetrainer WHERE katschluessel = '$_POST[katschluessel]' LIMIT $zufallswert,1";
 
Zurück