mysql获取当前行的下一行,MySQL-选择一行-然后相对于所选行,下一行和上一行

I'll try to make this clear.

I need to select a specific row and one row previous relative from that selected row and one row next relative from that selected row without using id's. Is this possible? Previous and next one, in short.

The reason why I can't (maybe I just don't know how) use id's, is because they are not in sequential order. They have gaps as you can see from this rather immature and random example.

TABLE

+----+----------------------+-------+

| id | name | value |

+----+----------------------+-------+

| 1 | some_name | asf |

+----+----------------------+-------+

| 4 | hello | A3r |

+----+----------------------+-------+

| 5 | how_do_you_do | HR5 |

+----+----------------------+-------+

| 8 | not_bad | 00D |

+----+----------------------+-------+

| 12 | i_like_women | lla |

+----+----------------------+-------+

| 13 | are_you_serious | 1Ha |

+----+----------------------+-------+

| 15 | nah_i_kid | Ad4 |

+----+----------------------+-------+

| 17 | it_is_just_the_boobs | Zc5 |

+----+----------------------+-------+

| 18 | thank_god | 102 |

+----+----------------------+-------+

| 44 | no_kidding | jjy |

+----+----------------------+-------+

First, I need to select one row based on specific value from one of its column. I know how to do that:

SELECT `value`

FROM `TABLE`

WHERE name = 'i_like_women'

This will select one row with id 12 with the value lla.

What I need is to select another at least two rows: one with the name 'not_bad' and one with the name 'are_you_serious' without specifying it. Or, in other words, previous and next one relative to this selected one.

In short, three rows should be selected based on one value. I'm new to MySQL, as you can guess.

Thanks for your time and attention. Enjoy helping me.

解决方案

The simplest way to do this is to exploit the fact that, although not continuous, your ids are in ascending order.

For example:

SELECT * FROM Table WHERE id = 8

UNION

--Select the first item less than 8

SELECT * FROM Table WHERE id = (SELECT MAX(id) FROM Table WHERE id < 8)

UNION

--select the first item greater than 8

SELECT * FROM Table WHERE id = (SELECT MIN(id) FROM Table WHERE id > 8)

If you only know the string, then:

DECLARE _id INT

SELECT _id = id FROM Table WHERE value = 'i_like_women'

Then you can simply feed this _id into the above query, instead of 8.

Note you don't need to use ` to demarcate the table and column names.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值