Hi John,

Jason's approach is obviously different to mine, and I can't quite get my head around it.

I can only go through my last approach, which would seem to offer a solution, regardless of the number of rows.

SELECT * FROM toptenlist
WHERE topTenListID = (mod(round((datediff(curdate(), '2008-10-10')/7),0),3)+1)

2008-10-10 is just an arbitrary date

(in the example above, i used a modulus of 3 (in red), but this number should be the same as the number of rows in the table.

what this (hopefully) does, is return an integer between 1 and 3, which will be one of the three rows in the table.

What the equation does is this...
calculates the number of days between the current date and an arbitrary date, divides this number by seven, so we have the number of weeks between these 2 dates, rounds this number so we get an integer value returned, then takes a modulus of this number, based on the number of rows in the table.
This should return either a 0, 1 or 2 in the case of a modulus of 3.
By adding 1 to this value, we get 1,2 or 3, which are the row id's
The integer returned will depend on the difference between the current date and the arbitrary date.

I have tried putting different arbitrary dates into the equation, and it seems to work, though you may want to test it more thoroughly.

Hopefully Jason will come back on this, as his approach seems a little neater, but I can't quite work it out.

Hope this helps

PS What I will do this morning is try it with a table of x rows and ensure it behaves as i think it should.

:-)