Randomizing pages in Wikipedia with MySQL and Perl?

I found a perl script that manages randomizing the wikipedia articles in Wikipedia here. The code seems to be slightly computer generated. Due to my present interest in MySQL, I thought you could possibly have the links and related data in a database.

I know that MySQL is good in maintaining relations between tables, while it seems you can easily implement things with Perl. I feel it somehow fuzzy to draw a line to their specialties. So:

How can you randomize Wikipedia articles with MySQL and Perl?

Upvotes: 1

Views: 170

Answers (2)

Artem Russakovskii
Artem Russakovskii

Reputation: 22023

If you really want to know how THEY (Wikipedia) do it, have a look at this code directly from Media Wiki:

http://svn.wikimedia.org/svnroot/mediawiki/trunk/phase3/includes/specials/SpecialRandompage.php

It is open source software after all ;), and that's the beauty of it.

Edit: From having a quick glance at the code, I am pretty sure they're using a field called page_random, set at row creation time. Then, since it's an indexed field, ordering by it with limit 1 is instant (with a given random offset, valid for this application, of course).

This is a very standard way to make random access quick, due to ORDER BY RAND() being extremely slow, as I mentioned in the other answer.

Edit #2: I love how clean and proper OOP Wiki Media's code is. Definitely bookmarking it to show PHP newbies what good PHP code looks like (and to remind myself).

Upvotes: 2

ceejayoz
ceejayoz

Reputation: 180023

SELECT id FROM articles ORDER BY RAND() LIMIT 1

You could, of course, just link to http://en.wikipedia.org/wiki/Special:Random

Upvotes: 1

Related Questions