我有一个类似的表
id | names | value
1 Vicky 43
2 Erica 23
3 Rueben 33
4 Bob 54
5 Chris 60
然后我根据它们的价值把它们排列好。现在桌子是这样的。
id | names | value
5 Chris 60
4 Bob 54
1 Vicky 43
3 Rueben 33
2 Erica 23
现在起点是id 5,它的名称为Chris,值为60。我的目标是,获得id为4、名称为Bob、值为54的下一行。
您只需要限制结果集:
SELECT * from table
ORDER BY value DESC
LIMIT 1, 1
输出:
| ID | NAMES | VALUE |
|----|-------|-------|
| 4 | Bob | 54 |
在这里打闹。
LIMIT
基本上是这样工作的:第一个数字设置起点(0
是最小值),第二个数字设置要获取的项目数量(在这种情况下只有一个)。
编辑:
理解这个问题的另一种方式是:给定特定字段的值(例如:值为5
的id
字段)。。。之前的记录是什么?由于我们在数据中有id 4
,我们应该返回该id。
这可以通过以下方式实现:
SELECT * from t
WHERE id < 5
ORDER BY id DESC
LIMIT 1
在这里打闹。
通过这种方式,您可以遍历两个顺序(ASC
和DESC
)的结果,还可以获得下一行或前一行(>
或<
)。
如果您当前的ID是例如4,则
下一个:
select*from foo where id=(select min(id)from foo which id>4)
上一页:
select*from foo where id=(select max(id)from foo which id<4)
sql服务器:
with temp as
(
SELECT ROW_NUMBER() OVER (ORDER BY value desc) AS ROWID, * FROM table_name
)
SELECT * from temp where ROWID=2
mysql:
SELECT * from table
ORDER BY value DESC
LIMIT 1, 1
我觉得这是一个与PHP相关的问题?
如果是这样的话,那么您可以使用PHP的mysql或mysqli_fetch函数来获得您想要的。。。以及一个环路
这是您通过mysql-query 的基本循环
$sql = mysql_query( "SELECT * from table ORDER BY value DESC" );
while ( $r = mysql_fetch_array( $sql ) ) {
echo $r['value'] . "<br />'n";
}
如果你想让它们都在你的支配下,并且能够随意调用其中任何一个,你需要将数据存储在一个可访问的数组中,就像一样
$sql = mysql_query( "SELECT * from table ORDER BY value DESC" );
$theData = array();
while ( $r = mysql_fetch_array( $sql ) ) {
$theData[] = $r['value'];
}
然后,要访问SECOND值,请使用此
echo $theData[1];