Hallo,
vorab: Ja ich habe die Suche benutzt;-) Es sind zwar einige Themen zum Thema rand() vorhanden aber keins war wirklich hilfreich...
Worum gehts:
Ich habe eine Tabelle mit einzelnen Wörtern (momentan ca. 250 Einträge).
Zu jeden Wort soll eine Relation zu n zufälligen Wörtern aus der gleichen Tabelle hergestellt werden. Diese Relationen müssen jederzeit genauso wieder hergestellt werden.
Ist ja eigentlich keine grösse Übung:
damit habe ich zu jedem $keyword n(Bsp: 15) $rand_keywords.
Nach Adam Riese und Eva Zwerg sollte jedes $rand_keyword ungefähr gleich oft getroffen werden (in diesen Fall ca. 15). Tut es aber nicht :-(
Das häufigste wird > 130 mal getroffen das seltenste 1-3 Mal (Bei einer Tabellegröße von ca. 250).
Getestet habe ich das sowohl unter WIN2000 mit MySQL 4.0.15 als auch unter Linux mit MySQL 3.23.57. In beiden Fällen eine ähnlich schlechte Verteilung.
Hat jemand eine Idee ob und wie ich eine bessere Verteilung bekomme? Der einzige Ansatzpunkt wäre IMHO der übergebene RAND_SEED. Dieser muss auf jeden Fall mit einem Wert belegt werden den ich jederzeit wiederholen kann, um die Relationen immer wieder gleich zu bekommen. NOW() fällt somit aus. Ausserdem wird dadurch die Veteilung auch nicht besser, habe ich bereits getestet.
vorab: Ja ich habe die Suche benutzt;-) Es sind zwar einige Themen zum Thema rand() vorhanden aber keins war wirklich hilfreich...
Worum gehts:
Ich habe eine Tabelle mit einzelnen Wörtern (momentan ca. 250 Einträge).
Zu jeden Wort soll eine Relation zu n zufälligen Wörtern aus der gleichen Tabelle hergestellt werden. Diese Relationen müssen jederzeit genauso wieder hergestellt werden.
Ist ja eigentlich keine grösse Übung:
PHP-Code:
while($row = mysql_fetch_array($key_query, MYSQL_ASSOC)) {
$keyword = $row['keyword'];
$rand_result = mysql_query("SELECT keyword FROM keywords ORDER by rand('".md5($keyword)."') LIMIT 15");
while($rand_row = mysql_fetch_array($rand_result, MYSQL_ASSOC)) {
$rand_keyword = $rand_row['keyword'];
}
}
Nach Adam Riese und Eva Zwerg sollte jedes $rand_keyword ungefähr gleich oft getroffen werden (in diesen Fall ca. 15). Tut es aber nicht :-(
Das häufigste wird > 130 mal getroffen das seltenste 1-3 Mal (Bei einer Tabellegröße von ca. 250).
Getestet habe ich das sowohl unter WIN2000 mit MySQL 4.0.15 als auch unter Linux mit MySQL 3.23.57. In beiden Fällen eine ähnlich schlechte Verteilung.
Hat jemand eine Idee ob und wie ich eine bessere Verteilung bekomme? Der einzige Ansatzpunkt wäre IMHO der übergebene RAND_SEED. Dieser muss auf jeden Fall mit einem Wert belegt werden den ich jederzeit wiederholen kann, um die Relationen immer wieder gleich zu bekommen. NOW() fällt somit aus. Ausserdem wird dadurch die Veteilung auch nicht besser, habe ich bereits getestet.
Kommentar