Forum Moderators: coopster
mysql> describe widgets;
+----------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+------------------+------+-----+---------+----------------+
| widgetid | int(10) unsigned | NO | PRI | NULL | auto_increment |
| color | varchar(100) | YES | | NULL | |
| rank | int(10) | YES | | NULL | |
+----------+------------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)
mysql> select widgetid, color, rank from widgets;
+----------+--------+------+
| widgetid | color | rank |
+----------+--------+------+
| 1 | Red | 88 |
| 2 | Green | 2506 |
| 3 | Blue | 57 |
| 4 | Pink | 4711 |
| 5 | Yellow | 1 |
| 6 | Black | 7799 |
| 7 | cyan | 42 |
+----------+--------+------+
7 rows in set (0.00 sec)
mysql> select widgetid, color, rank from widgets order by rank;
mysql> select widgetid from widgets where rank > 88 order by rank limit 1;
mysql> select widgetid from widgets where rank < 88 order by rank desc limit 1;
mysql> select min(rank) from widgets where rank > 88;
mysql> select max(rank) from widgets where rank < 88;
select cur,widgetid,cur.color, cur.rank, max(prv.rank) as prv_rank , min(nxt.rank) as nxt_rank
from widgets as cur
left join widgets as prv
on cur.rank > prv.rank
left join widgets as nxt
on cur.rank < nxt.rank
group by cur.widgetid ;
select ordering.widgetid, ordering.color, ordering.rank, prv.widgetid as prv_id, nxt.widgetid as nxt_id
from (
select cur.widgetid, cur.color, cur.rank, max(prv.rank) as prv_rank , min(nxt.rank) as nxt_rank
from widgets as cur
left join widgets as prv on cur.rank > prv.rank
left join widgets as nxt on cur.rank < nxt.rank
group by cur.widgetid ) as ordering
left join widgets as prv on prv.rank = ordering.prv_rank
left join widgets as nxt on nxt.rank=ordering.nxt_rank;