> One solution could be something like
>
> SELECT id, first, last
> FROM names
> WHERE last > '$previouslast' AND first > 'previousfirst'
> ORDER BY last, first
> LIMIT 1
>
> That is: Take all results that "come after" the previous name, sort
> them and then take only the first.
>
> The problem with it is that it only works fine as long as (last,first)
> is unique. If not, you will end up looping on the same (last,first)
> pair forever.
I don't think it would loop forever, since you search by '>', not '>=', so
any identical names would be skipped. Either way, though, last,first, must
be unique. A fix to this might be to order by id after this, since id is
unique
SELECT id, first, last
FROM names
WHERE last > 'previouslast' AND first > 'previousfirst' AND
id>'$previousid'
ORDER BY last, first, id
LIMIT 1
Thus sorting through any identical names as well. (How many Bob Smiths can
there be?)
However, this brings out a problem in using AND to combine the elements. by
saying "WHERE last > '$previouslast' AND first > 'previousfirst'
", we're falsly stating that the first name _must_ increase along with the
last name, where in reality the first name may decrease, so long as the last
name increases. Follow? Here:
Elliott, Nicholas
Smith, Bob
After Finding Elliott, Nicholas, the Query would _not_ find Bob Smith, even
though 'Smith'>'Elliott', because 'Bob' is not greater that 'Nicholas'.
So, whats the best way to rewrite this? Perhaps a Concat?
SELECT id, first, last
FROM names
WHERE CONCAT(last,first,id)>CONCAT('$previouslast', '$previousfirst',
'$previousid')
ORDER BY last, first, id
LIMIT 1
I think that would work, feel free to correct me!
Nicholas Elliott
---------------------------------------------------------------------
Before posting, please check:
http://www.mysql.com/manual.php (the manual)
http://lists.mysql.com/ (the list archive)
To request this thread, e-mail <[EMAIL PROTECTED]>
To unsubscribe, e-mail <[EMAIL PROTECTED]>
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php