On Sunday 09 December 2001 12:26, Paul DuBois wrote:
> At 3:19 PM -0800 12/8/01, Rob@TH wrote:
> >Hmm still nothing :/
> >Any other possibilities?
>
> The suggestion offered below is a workaround that seems logical given
> the lack of ORDER BY RAND() prior to MySQL 3.23.  Unfortunately, it
> doesn't work due to the behavior of the optimizer in pre-3.23 versions.
> Specifically, MySQL notices that "rand() as rnd" is a function, deduces
> (incorrectly) that the contents of the column will be constant, and thus
> optimizes away the "order by rnd" clause entirely.  Result: no sorting.
>
> To deal with this, use an expression that includes RAND(), but written
> in such a way that the optimizer won't think is constant.  For example,
> if you have an id column, do something like this:
>
> SELECT id*0+RAND() AS rnd, ... FROM tbl_name ORDER BY rnd LIMIT 1;


Seems to work for me using 3.23.42 -- is it a bug ;-)


mysql> select * from category;
+-------------+----------------------+
| category_id | category_description |
+-------------+----------------------+
|  0000000001 | Feng Shui            |
|  0000000002 | Figure               |
|  0000000003 | Magnet               |
|  0000000004 | Candle               |
+-------------+----------------------+

mysql> select category_description, rand() as rnd from category order by rnd;
+----------------------+-------------------+
| category_description | rnd               |
+----------------------+-------------------+
| Candle               | 0.467619647707436 |
| Figure               | 0.581306149793143 |
| Magnet               | 0.916031742390275 |
| Feng Shui            | 0.996833012436361 |
+----------------------+-------------------+
4 rows in set (0.00 sec)

mysql> select category_description, rand() as rnd from category order by rnd;
+----------------------+-------------------+
| category_description | rnd               |
+----------------------+-------------------+
| Feng Shui            | 0.433106270090776 |
| Figure               | 0.656810501270751 |
| Candle               | 0.836240293305591 |
| Magnet               | 0.984733726815073 |
+----------------------+-------------------+
4 rows in set (0.00 sec)

mysql> select category_description, rand() as rnd from category order by rnd;
+----------------------+-------------------+
| category_description | rnd               |
+----------------------+-------------------+
| Figure               | 0.200211824104387 |
| Magnet               | 0.565105185438977 |
| Feng Shui            | 0.811984655272201 |
| Candle               | 0.953237160996755 |
+----------------------+-------------------+



-- 
Jason Wong -> Gremlins Associates -> www.gremlins.com.hk

/*
Boling's postulate:
        If you're feeling good, don't worry.  You'll get over it.
*/

---------------------------------------------------------------------
Before posting, please check:
   http://www.mysql.com/manual.php   (the manual)
   http://lists.mysql.com/           (the list archive)

To request this thread, e-mail <[EMAIL PROTECTED]>
To unsubscribe, e-mail <[EMAIL PROTECTED]>
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php

Reply via email to