Micah,

I'm trying to find the first row before and the first row after a specific row

Here's one way:

drop table if exists t;
create table t(userid int, data int);
insert into t values(1,10),(3,20),(6,30),(8,50),(10,60), (13,80);

-- retrieve rows just before and just after userid=8:
select t.*
from t
join (
 select
   (select max(userid) from t where userid<8) as prev,
   (select min(userid) from t where userid>8) as next
 from t
 where userid=8
) a
on t.userid=a.prev or t.userid=a.next;
+--------+------+
| userid | data |
+--------+------+
|      6 |   30 |
|     10 |   60 |
+--------+------+

PB

-----

Micah Stevens wrote:
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


------------------------------------------------------------------------


No virus found in this incoming message.
Checked by AVG - http://www.avg.com Version: 8.0.175 / Virus Database: 270.9.0/1777 - Release Date: 11/9/2008 9:53 AM

Reply via email to