Dear reader, this is a challenge. How’s your MySQL prowess? You know about LIMIT: it cuts off the results at the specified number.
mysql>s; select actor_id from sakila.actor where actor_id % 5 = 0 limit 5; +----------+ | actor_id | +----------+ | 5 | | 10 | | 15 | | 20 | | 25 | +----------+ 5 rows in set (0.00 sec)
But that query actually accessed 25 rows. What if I want to say “return up to 5 rows, but don’t read any more than 20 rows to find them?”
Right now I’ve got the following:
mysql> select actor_id, @rows -> from actor, (select @rows := 0) as x where -> ((@rows := @rows + 1) <= 20) -> and actor_id % 5 = 0 -> limit 5; +----------+-------+ | actor_id | @rows | +----------+-------+ | 5 | 5 | | 10 | 10 | | 15 | 15 | | 20 | 20 | +----------+-------+ 4 rows in set (0.00 sec)
The …
[Read more]