Random und Limit

Random und Limit

am 15.08.2005 12:22:44 von Albert Naumann

Hallo,

wie muss eine Abfrage geschrieben werden wenn ich mit
LIMIT 20 Zeilen lesen möchte und aus diesen dann 2 mit RANDOM
anzeigen?

Viele Grüße
Albert

Re: Random und Limit

am 15.08.2005 13:27:30 von Stefan Rybacki

Albert Naumann wrote:
> Hallo,
>
> wie muss eine Abfrage geschrieben werden wenn ich mit
> LIMIT 20 Zeilen lesen möchte und aus diesen dann 2 mit RANDOM
> anzeigen?
>

Warum 20 Lesen und dann doch nur 2 davon ausgeben?

SELECT ... WHERE ... ORDER BY rand() LIMIT 2

Ansonsten innerhalb PHP lösen. 20 lesen und 2 zufällig auswählen.

Bis denn dann
Stefan

> Viele Grüße
> Albert
>
>

Re: Random und Limit

am 15.08.2005 13:49:42 von Albert Naumann

> Warum 20 Lesen und dann doch nur 2 davon ausgeben?
> SELECT ... WHERE ... ORDER BY rand() LIMIT 2

weil erst mit WHERE 20 Zeilen ausgewählt werden sollen und
auf diese der RANDOM angewendet werden soll.

Re: Random und Limit

am 15.08.2005 17:43:22 von Hakan Kuecuekyilmaz

Albert Naumann wrote:
> Hallo,
>
> wie muss eine Abfrage geschrieben werden wenn ich mit
> LIMIT 20 Zeilen lesen möchte und aus diesen dann 2 mit RANDOM
> anzeigen?

SELECT * FROM
(SELECT * FROM foo LIMIT 20) AS a
ORDER BY rand() LIMIT 2;

Sollte funktionieren.

Grüße, Hakan
--
Hakan Kuecuekyilmaz

Re: Random und Limit

am 17.08.2005 15:30:46 von Albert Naumann

> SELECT * FROM
> (SELECT * FROM foo LIMIT 20) AS a
> ORDER BY rand() LIMIT 2;
>
> Sollte funktionieren.

sorry, kann nicht ganz folgen ...
hast du mir ein funktionsfähiges Beispiel?

Gruss Albert

Re: Random und Limit

am 17.08.2005 15:32:47 von Stefan Rybacki

Albert Naumann wrote:
>>SELECT * FROM
>> (SELECT * FROM foo LIMIT 20) AS a
>>ORDER BY rand() LIMIT 2;
>>
>>Sollte funktionieren.
>
>
> sorry, kann nicht ganz folgen ...
> hast du mir ein funktionsfähiges Beispiel?
>

Es ist funktionisfähig. Allerdings nur, wenn dein mySQL subqueries unterstützt.

Bis denn dann
Stefan

> Gruss Albert
>
>

Re: Random und Limit

am 24.08.2005 11:15:04 von Hakan Kuecuekyilmaz

Albert Naumann wrote:
>>SELECT * FROM
>> (SELECT * FROM foo LIMIT 20) AS a
>>ORDER BY rand() LIMIT 2;
>>
>>Sollte funktionieren.
>
>
> sorry, kann nicht ganz folgen ...
> hast du mir ein funktionsfähiges Beispiel?

Hallo Albert,

das Statement oben funktioniert ab MySQL 4.1. Hier ein vollständiges
Beispiel:
CREATE TABLE foo (a int);
INSERT INTO foo values (1);
INSERT INTO foo values (2);
INSERT INTO foo values (3);
INSERT INTO foo values (4);
INSERT INTO foo values (5);
INSERT INTO foo values (6);
INSERT INTO foo values (7);
INSERT INTO foo values (8);
INSERT INTO foo values (9);
INSERT INTO foo values (10);
INSERT INTO foo values (11);
INSERT INTO foo values (12);
INSERT INTO foo values (13);
INSERT INTO foo values (14);
INSERT INTO foo values (15);
INSERT INTO foo values (16);
INSERT INTO foo values (17);
INSERT INTO foo values (18);
INSERT INTO foo values (19);
INSERT INTO foo values (20);
INSERT INTO foo values (21);
INSERT INTO foo values (22);
INSERT INTO foo values (23);

SELECT * FROM
(SELECT * FROM foo LIMIT 20) AS a
ORDER BY rand() LIMIT 2;


Ausgabe bei mir:

5.0.12-beta-debug-log
[11:13] root@test>SELECT * FROM
-> (SELECT * FROM foo LIMIT 20) AS a
-> ORDER BY rand() LIMIT 2;
+------+
| a |
+------+
| 5 |
| 13 |
+------+

Grüße, Hakan
--
Hakan Kuecuekyilmaz