可以结合limit实现,相当于分页。
....WHERE date='dateVal' AND index<'indexVal' ORDER BY index ASC LIMIT 1; #上一条
....WHERE date='dateVal' AND index>'indexVal' ORDER BY index ASC LIMIT 1; #下一条
....WHERE date='dateVal' AND index<'indexVal' ORDER BY index ASC LIMIT 1; #上一条
....WHERE date='dateVal' AND index>'indexVal' ORDER BY index ASC LIMIT 1; #下一条
关于上一单、下一单,我们要考虑一种极端情况,我以上一单为例说一下:
一般情况下,所谓上一单就是date不变的情况下,index-1(考虑充分一点,万一index不连贯,就取比index小一点的),但是,如果index本来就是那一天最小的呢?这时,就要考虑到date先选前一天的(如果前一天没有,则要选再前一天的),然后在date固定的情况下,选index最大的一个
下一单也是类似的道理。
麻烦就麻烦在这里。
那你这个就得结合程序去实现了,以上一单为例如下:
$sql = "SELECT date, index FROM table WHERE date='dateVal' AND index<'indexVal'
ORDER BY index ASC LIMIT 1";
$result = mysql_query($sql);
$row = mysql_fetch_row($result); //这里是正常情况,既有值
if(empty($row)){ //所谓的极端情况来了。。,既上一个有单日期的最后一单
$sql = "SELECT date, index FROM table WHERE date<'dateVal'
ORDER BY date,index DESC LIMIT 1";
$result = mysql_query($sql);
$row = mysql_fetch_row($result);
}
print_r($row);