5 Datensätze per Zufall auswählen und ausgeben

5 Datensätze per Zufall auswählen und ausgeben

am 16.11.2006 08:28:48 von Tatjana Hussel

Ich habe in einer Tabelle hunderte von Datensätze alle haben eine ID, doch
sind teilweise auh IDs gelöscht.

z.B.
100, 101, 103, 104,105, 107,108

nun möchte ich 5 Datensätze zufallsmässig aus dieser Tabelle auslesen


$sql = "id,name* from test LIMIT 5
$result = mysql_query($sql) or die ($sql.'
'.mysql_error());
while ($ausgabe = mysql_fetch_object($result))

so bekomme ich die ersten 5 Datensätze, wie mache ich es aber das diese per
Zufall gemischt sind.

Tatjana

Re: 5 Datensätze per Zufall auswählen und ausgeben

am 16.11.2006 09:19:18 von Karsten Busenbender

Tatjana Hussel schrieb:
> nun möchte ich 5 Datensätze zufallsmässig aus dieser Tabelle ausl=
esen
>=20
> $sql =3D "id,name* from test LIMIT 5
> $result =3D mysql_query($sql) or die ($sql.'
'.mysql_error());
> while ($ausgabe =3D mysql_fetch_object($result))

Hallo Tatjana.

Spontan faellt mir da nur ein, alle Datensaetze auszulesen und per=20
Zufall eine Anzahl X an Datensaetzen herauszupicken.

Beispielsweise habe ich eine Webseite, auf der jedesmal ein neuer Spruch =

erscheint. Dazu lasse ich mir die IDs der Sprueche ausgeben (ebenfalls=20
welche zwischendurch geloescht) und lese die alle in ein Array ein. Mit=20
shuffle($array) suche ich mir eine ID heraus und frage dazu den Spruch ab=


Gruss,
Karsten

Re: 5 Datensätze per Zufall auswählen und ausgeben

am 16.11.2006 10:17:00 von Frank Schenk

Tatjana Hussel schrieb:
> Ich habe in einer Tabelle hunderte von Datensätze alle haben eine ID, doch
> sind teilweise auh IDs gelöscht.
>
> z.B.
> 100, 101, 103, 104,105, 107,108
>
> nun möchte ich 5 Datensätze zufallsmässig aus dieser Tabelle auslesen

Hallo,

17.9. Wie kann ich einen zufälligen Eintrag aus einer MySQL-Tabelle
auswählen?
http://www.php-faq.de/q/q-mysql-zufall.html

gruß, Frank

Re: 5 Datensätze per Zufall auswählen und ausgeben

am 16.11.2006 11:26:28 von Niels Braczek

Frank Schenk schrieb:
> Tatjana Hussel schrieb:

>> nun möchte ich 5 Datensätze zufallsmässig aus dieser Tabelle aus=
lesen

> 17.9. Wie kann ich einen zufälligen Eintrag aus einer MySQL-Tabelle=20
> auswählen?
> http://www.php-faq.de/q/q-mysql-zufall.html

Wobei du die Zufälligkeit verbessern kannst:

$sql =3D "SELECT * FROM tabelle ORDER BY REVERSE(RAND()) LIMIT 0,5"

MfG
Niels

--=20
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------

Re: 5 Datensätze per Zufall auswählen und ausgeben

am 16.11.2006 12:17:57 von Frank Schenk

Niels Braczek schrieb:
> Frank Schenk schrieb:

>> 17.9. Wie kann ich einen zufälligen Eintrag aus einer MySQL-Tabelle
>> auswählen?
>> http://www.php-faq.de/q/q-mysql-zufall.html
>
> Wobei du die Zufälligkeit verbessern kannst:
>
> $sql = "SELECT * FROM tabelle ORDER BY REVERSE(RAND()) LIMIT 0,5"

Richtig, das hatte ich auf die schnelle nur nicht gefunden.

Sollte man mal zur FAQ hinzufügen :)

gruß, Frank

P.S.: Ja, ich kenne die Seite "Kann ich für die FAQ schreiben" o.ä. :-P

Re: 5 Datensätze per Zufall auswählen und ausgeben

am 16.11.2006 15:18:01 von Claus Reibenstein

Niels Braczek schrieb:

> Frank Schenk schrieb:
>
>> http://www.php-faq.de/q/q-mysql-zufall.html
>
> Wobei du die Zufälligkeit verbessern kannst:
>
> $sql = "SELECT * FROM tabelle ORDER BY REVERSE(RAND()) LIMIT 0,5"

REVERSE() erwartet einen String als Argument, RAND() liefert jedoch ein
double zwischen 0 und 1. Wie ist REVERSE() auf double definiert?

Die Annahme, dass dieser double einfach in seine Stringdarstellung
geändert und diese dann umgedreht wird, führt zu keinem sinnvollen
Ergebnis. Liefert RAND() z.B. 0.12345, dann würde REVERSE() daraus
54321.0 machen. Wo ist da die Verbesserung?

Gruß. Claus
--
,~°O O
O ,´ / |/|\
/ |¯`. Das neue Hochzeits-Branchenbuch im Internet ,´ / | |\
/__| `~...............................................~´ /___|/ /

Re: 5 Datensätze per Zufall auswählen und ausgeben

am 16.11.2006 16:51:37 von Niels Braczek

Claus Reibenstein schrieb:
> Niels Braczek schrieb:

>> Wobei du die Zufälligkeit verbessern kannst:
>> $sql =3D "SELECT * FROM tabelle ORDER BY REVERSE(RAND()) LIMIT 0,5"
>=20
> REVERSE() erwartet einen String als Argument, RAND() liefert jedoch ein=

> double zwischen 0 und 1. Wie ist REVERSE() auf double definiert?

Die String-Repräsentation wird umgedreht.

> Die Annahme, dass dieser double einfach in seine Stringdarstellung
> geändert und diese dann umgedreht wird, führt zu keinem sinnvollen
> Ergebnis.

Doch.

> Liefert RAND() z.B. 0.12345, dann würde REVERSE() daraus
> 54321.0 machen. Wo ist da die Verbesserung?

Das gleicht die Unzulänglichkeiten des MySQL-Pseudozufallsgenarators
aus. Das Ende der generierten Zahl entspricht wesentlich besser einer
LaPlace-Verteilung als der Anfang. Ohne REVERSE() bekommst du -- aus
welchen Gründen auch immer -- bevorzugt Einträge vom Anfang der Liste=


MfG
Niels

--=20
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------