[development] Drupal 7 Entities - view random node
nan wich
nan_wich at bellsouth.net
Mon Jan 24 02:12:08 UTC 2011
Thanks, Larry, that make me feel a bit better.
The suggestion is to keep a separate table of applicable nodes, generate a
random number from the number of records, and get that record. Your explanation
seems to indicate that one is simply spreading the "overhead" out over time -
and probably increasing it in total, maybe. Given that the block can be
refreshed on every page load, and a new node created relatively infrequently, I
can also see that there may be some merit when the number of nodes gets fairly
large. Maybe something like "SELECT n.* FROM {quotes_random} r INNER JOIN {node}
n ON n.nid = r.nid WHERE r.row_num = 1 + RAND() * (SELECT MAX(row_num) FROM
{quotes_random})". (Sorry for the D6 version; it would take me a much longer
time to construct in D7.)
Nancy
Injustice anywhere is a threat to justice everywhere. -- Dr. Martin L. King, Jr.
________________________________
From: Larry Garfield
I don't know that I've ever tried it with 12k nodes so I can't say from
experience.
Randomization is a tricky subject. The common method, which Views uses as
does the ->orderRandom() method of DBTNG, boils down to adding a random number
as a new column for each record, ordering by that, and then (in this case)
discarding all but the first record. That involves a linear-growth creation
for the new column (a fixed additional cost per record) and then an integer
ordering. Assuming the sorting function in the SQL database is sane (which if
it isn't you need a new database), that should be an n*log n algorithm.
(That's as fast as a sorting algorithm can get.)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.drupal.org/pipermail/development/attachments/20110123/af908aec/attachment-0001.html
More information about the development
mailing list