Hi Alexander,

Very weird!  I tried the query myself, setting it up as such:

CREATE TABLE TEMP (id int not null AUTO_INCREMENT primary_key);

and inserted 18 values into it.

I am amazed that:

SELECT * FROM temp WHERE id=(
  (SELECT id FROM temp WHERE id <
    (SELECT ROUND(RAND()*MAX(id)) from temp)
  ORDER BY id LIMIT 1));

sometimes gives more than 1 result, other times gives an empty set.  I
would guess that it gives empty set when the random number picks the
maximum number, but in practice it seems to happen more often than
that.  Plus, when I tried

SELECT * FROM temp WHERE id =
  (SELECT id FROM temp WHERE id >
    (SELECT ROUND(RAND()*(MAX(id)-1)) from temp)
  ORDER BY id LIMIT 1)  ORDER BY RAND() LIMIT 1;
Empty set (0.00 sec)

so even getting the max minus 1 didn't help.

I have no idea why that would happen, but I can confirm you're not crazy.

-Sheeri


On 2/2/06, Alexander Mueller <[EMAIL PROTECTED]> wrote:
> Hi,
>
> I am trying to get the following query in MySQL 4.1 to return all rows with
> the next larger value of the one generated by RAND()*MAX(field) and then to
> randomly choose a row from these.
>
>   SELECT *
>     FROM table
>     WHERE field=
>         (SELECT field
>           FROM table
>           WHERE field>
>              (select ROUND(RAND()*MAX(field))
>               from table)
>           ORDER BY field LIMIT 1)
>     ORDER BY RAND() LIMIT 1
>
> So far it also seems to work, however every third or fourth run results in
> an empty result set and I do not really know why, especially because the
> first subquery always returns an existent value.
>
>   SELECT field
>     FROM table
>     WHERE field>
>       (select ROUND(RAND()*MAX(field))
>          from table)
>     ORDER BY field LIMIT 1
>
> I would appreciate any comment or suggestion.
>
> Thanks,
> Alexander
>
> --
> Lust, ein paar Euro nebenbei zu verdienen? Ohne Kosten, ohne Risiko!
> Satte Provisionen für GMX Partner: http://www.gmx.net/de/go/partner
>
> --
> MySQL General Mailing List
> For list archives: http://lists.mysql.com/mysql
> To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]
>
>

--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]

Reply via email to