Christoph Zurnieden: Zufaellige Auswahl von Datensaetzen

Beitrag lesen

Hi,

In jedem Datensatz gibt es ein Feld Names "Status". Hier stehen Zahlen von 1-10 drin. Nun moechte ich, dass um so hoeher der Status ist, um so seltener soll dieser Datensatz ausgewählt sein.

Die Idee von Rouven ist so schlecht nicht, aber auch wenn Speicher heutzutage nicht mehr gar so teuer ist ... ;-)

Aber es reicht ja auch eine Art Bitmap (PHP ist nicht gerade berühmt dafür, gut rechnen zu können, deshalb erspare ich mir hier mal die mehr oder minder geschickten Algorithmen, die eine entsprechende Verteilungskurve erzeugen könnten ;-):

// Verteilung bitte anpassen
$bitm = '111111111122222222233333333 usw.';

[DB Initialisierung snipped]

mt_srand ((double) microtime() * (1000000));

// strlen($bitm) bitte bei Gelegenheit durch passenden Integer ersetzen
// (Wenn die Verteilung nicht passt ist es am billigsten in $bitm einige
// Ziffern hinzuzufügen, oder zu entfernen)
// Evt ist hier eine explizite Typumwandlung nach Integer nötig
$randomstat =  mt_rand(0, strlen($bitm) );

// Alle Zeilen mit einem zufällig (unter Berücksichtigug obiger Verteilungskurve) gewähltem "status"
// markieren.
// "ORDER BY ID" muß nicht unbedingt
$result = mysql_query("SELECT * FROM $your_db WHERE status =  $bitm{$randomstat} ORDER BY id");

// Eine zufällige Zeile daraus auswählen (mysql_affected_rows() ist die Anzahl
// der gefundenen Zeilen)
$randomrow =   mt_rand(0, mysql_affected_rows() );

// Zeiger auf eine zufällig ausgewählte Zeile stellen und ausgeben
// in $row sollte jetzt das Ergebnis sein, wenn alles korrekt ablief, oder besser:
// wenn alles so lief, wie ich mir das vorgestellt hatte ;-)
$row = mysql_data_seek ($result, $randomrow);

Ich habe im Augenblick keine Gelegenheit (sprich: Zeit) das zu testen (Alle Typos gehören dem, der sie findet ;-), aber als Anregung sollte es genügen.

so short

Christoph Zurnieden