Select the UserId one less, and then ORDER ASC LIMIT 3.

Assuming your UserId's are sequential, it's easy, given userID X

SELECT * FROM Users WHERE UserId = X-1 ORDER BY UserId ASC LIMIT 3;

If they're not sequential due to deletions, etc, it becomes a bigger
problem. You could do a subquery, but that would only be marginally
faster than two queries.

Sorry if I'm not more creative in the morning. :)

-Micah

On 11/12/2008 01:10 AM, Waynn Lue wrote:
> Whoops, just realized I made a mistake in the examples.  What I'm really
> looking for is these two queries:
>
> SELECT * FROM Users WHERE UserId > *userid*;
> SELECT * FROM Users WHERE UserId < *userid*;
>
> Waynn
>
> On Wed, Nov 12, 2008 at 12:14 AM, Waynn Lue <[EMAIL PROTECTED]> wrote:
>
>   
>> I'm trying to find the first row before and the first row after a specific
>> row.  Essentially I want to do these two queries, and get each row.
>>
>> SELECT * FROM Users WHERE UserId = <userId> ORDER BY UserId DESC LIMIT 1;
>> SELECT * FROM Users WHERE UserId = <userId> ORDER BY UserId LIMIT 1;
>>
>> Is there any way to combine this into one query?  OFFSET doesn't allow a
>> negative number, which is essentially what I want.
>>
>> Thanks,
>> Waynn
>>
>>     
>
>   

Reply via email to