Yes, I saw that - and many others. One variation uses a LOCK to eliminate
the race potential, but I am reluctant to do that. Unfortunately, that has a
problem if there are key gaps. This looks a bit more fail-proof:
http://edrackham.com/featured/get-random-row-with-mysql-without-order-by-rand/
My issue with these techniques is that the vast majority of the users of the
Quotes module don't have anywhere near 12K quotes nodes (I personally have
163),
so do I let the one suffer, or let everyone use the "improved" technique
(meaning an additional table), or choose some point at which to switch
techniques (code bloat). And, of course, making sure it works on Postgres as
well.
I'd be happy to move this discussion to another venue if anyone is upset.
Nancy
Injustice anywhere is a threat to justice everywhere. -- Dr. Martin L. King, Jr.
________________________________
From: Larry Garfield
Actually, I just found this in the MySQL manual in user comments:
SELECT FLOOR(RAND() * COUNT(*)) AS rand_row FROM {mytemp};
SELECT nid FROM {mytemp} LIMIT $rand_row, 1;
That could actually be faster, at the cost of being two queries so there are
technically potential race conditions. (Unlikely to be a problem in practice,
but still there.) I've not tried the above; I just saw it and thought it was
cool. :-) (It's also MySQL-specific. I don't know if the same thing would
work well on other databases.)